英文:
How to establish a foreign key relationship in MongoDB?
问题
我有一个名为customer
、product
和purchase_order
的PostgreSQL数据库,每个表都有id_
作为主键。表purchase_order
还有customer_id
(customer
表的id_
字段)和product_id
(product
表的id_
字段)作为外键。
我想在MongoDB上创建相同的数据库。然而,我不确定如何建立外键。我已经进行了研究,发现这在很大程度上取决于我如何做。所以,这是我在MongoDB上创建purchase_order
表的方式:
{
"_id": { "$oid": "5f5639cdb675b2a13db059b3" },
"customer_id": { "$oid": "5f563a08b675b2a13db059b1" },
"product_id": { "$oid": "5f563a13b675b2a13db059b2" },
"status": false
}
我的目标是编写一个Spring应用程序来执行CRUD方法。在PostgreSQL上,我在数据库上添加了外键约束,并在我的代码上添加了@OneToMany
和@ManyToOne
注解来建立外键关系。然而,我不确定如何在MongoDB上实现它。我的MongoDB文档是否正确表示了外键?如何确保在我的Spring应用程序中为MongoDB建立外键关系?
英文:
I have a postgreSQL database that has 3 tables named customer
, product
and purchase_order
. Every table has id_
as the primary key. Table purchase_order
also has customer_id
(id_
field of customer
table) and product_id
(id_
field of product
table) as foreign keys.
I want to create the same DB on MongoDB. However, I'm not sure how to establish foreign keys. I have researched it and found out that it is pretty much up to me how to do it. So, this is how I did purchase_order
table on MongoDB:
{"_id":{"$oid":"5f5639cdb675b2a13db059b3"},
"customer_id":{"$oid":"5f563a08b675b2a13db059b1"},
"product_id":{"$oid":"5f563a13b675b2a13db059b2"},
"status":false}
My goal is to write a spring application to perform CRUD methods. On postgreSQL, I added foreign key constraints on DB and @OneToMany
& @ManyToOne
annotations on my code to establish foreign keys. However, I'm not sure how to do it for MongoDB. Does my MongoDB document correctly represent the foreign keys? How can I make sure to establish my foreign keys on my spring application for MongoDB?
答案1
得分: 5
如果您在后端使用JavaScript,您想要的功能可以很容易地通过Mongoose实现!
这涉及为实体创建模式(Schema),并为实体的外键字段/列指定ref
属性,该属性与现有模型的名称匹配。
随后,每当您查询数据库以获取单个文档时,还可以添加或填充外键字段的详细信息。
如果您尚未使用或熟悉Mongoose,请在开始使用mongoose中查看,然后继续查看这份文档,其中为您在查询时如何填充外键字段提供了示例。
在您的特定案例中,给定的模式可能如下所示:
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const CustomerSchema = new Schema({
_id: {
type: Schema.Types.ObjectId,
}
// 其他相关字段
})
const ProductSchema = new Schema({
_id: {
type: Schema.Types.ObjectId,
}
// 其他相关字段
})
const ProductOrderSchema = new Schema({
_id: {
type: Schema.Types.ObjectId,
},
customer_id: {
type: Schema.Types.ObjectId,
ref: 'Customer'
},
product_id: {
type: Schema.Types.ObjectId,
ref: 'Product'
}
});
// 您的模型
const Customer = mongoose.model('Customer', CustomerSchema);
const Product = mongoose.model('Product', ProductSchema);
const ProductOrder = mongoose.model('ProductOrder', ProductOrderSchema);
希望您可以相对轻松地解决这个问题!
英文:
If you are using JavaScript on your backend, what you are looking for can be easily achieved with Mongoose!
This involves creating a Schema for an entity and specifying a ref
property for the entity's foreign key field/column that matches the name of an existing model.
Following this, whenever you query the database for a single document, you can also add or populate the details for the foreign key field.
Kindly view this on getting started with mongoose if you are not using it or familiar with it, and then move on to this documentation which provides examples for populating the foreign key field when you make a query.
In your specific case a given schema could look like this:
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const CustomerSchema = new Schema({
_id: {
type: Schema.Types.ObjectId,
}
// Other relevant fields
})
const ProductSchema = new Schema({
_id: {
type: Schema.Types.ObjectId,
}
// Other relevant fields
})
const ProductOrderSchema = new Schema({
_id: {
type: Schema.Types.ObjectId,
},
customer_id: {
type: Schema.Types.ObjectId,
ref: 'Customer'
},
product_id: {
type: Schema.Types.ObjectId,
ref: 'Product'
}
});
// Your models
const Customer = mongoose.model('Customer', CustomerSchema);
const Product = mongoose.model('Product', ProductSchema);
const ProductOrder = mongoose.model('ProductOrder', ProductOrderSchema);
Hope you can get this sorted out relatively easily!
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论