在Node.js
应用中Mongodb
/ Mongoose
。我有两个系列。 Users
和Books
。我的问题是:当用户保存书籍时,我必须将其保存在Books
集合中,并将其对象ID保存在Users
集合中以供参考。一个用户输入的两个保存操作。
这是正确的方法吗?这是Mongodb
标准吗?在基于关系的数据库系统中,它是一个错误的架构,但在Mongodb
中缺少加入我该怎么办?如果我有一个大型数据库,我应该在每个相关集合中保存当前的书籍ID吗?
我知道我可以在每个用户文档中嵌入书籍,但它有自己的问题。
我很困惑。我该怎么办?答案 0 :(得分:0)
您可以使用Mongoose在MongoDB中创建MySQL“join”。它不是MongoDB标准,但它使MongoDB中的开发有时更容易。下面是两个简单的示例模式。
var BookSchema = new Schema({
title: {
type String
},
author: {
type: String
}
});
module.exports = mongoose.model('Book', BookSchema);
var UserSchema = new Schema({
username: {
type: String,
required: true
},
books: [{
type: String,
ref: 'Book'
}]
});
module.exports = mongoose.model('User', UserSchema);
在最后一个模式中,有一个“books”属性,其中包含对书籍的引用。您可以在数组中存储对象ID的字符串(而不是对象)。如果需要,您还可以存储Object id而不是Strings。以下是用户的示例模式:
{
username: "Fcoder",
books: ["550adf3899fbe92a168d3051", "550adf3899fbe92a168d3052"]
}
查询MongoDB数据库时,您可以populate数据。您的查询将如下所示:
User.find({}).populate('books').exec(function(err, data) {
// callback
});
在内部数据中,您会发现如下内容:
{
username: "Fcoder",
books: [{
_id: ObjectId("550adf3899fbe92a168d3051"),
title 'Some title 1',
author: 'Some author 1'
}, {
_id: ObjectId("550adf3899fbe92a168d3052"),
title 'Some title 2',
author: 'Some author 2'
}
}