【问题标题】:Saving document and its object id for referencing in other documents保存文档及其对象 ID 以在其他文档中引用
【发布时间】:2016-02-01 00:12:51
【问题描述】:

在带有Mongodb/MongooseNode.js 应用程序中。我有两个系列。 UsersBooks。我的问题是:当用户保存一本书时,我必须将其保存在 Books 集合中,并将其对象 ID 保存在 Users 集合中以供参考。一个用户输入的两个保存操作。

这是正确的方法吗?这是Mongodb 标准吗?在基于关系的数据库系统中,它的架构是错误的,但在 Mongodb 中缺少 Join 我该怎么办?如果我有一个大型数据库,我应该在每个相关集合中保存当前书籍 ID 吗?

我知道我可以在每个用户文档中嵌入书籍,但它有自己的问题。

我很困惑。我该怎么办?

【问题讨论】:

  • 您应该在 Book model 'author' 上创建一个密钥,您可以在其中保存发布图书 _ID 的用户

标签: javascript node.js mongodb mongoose nosql


【解决方案1】:

您可以使用 Mongoose 在 MongoDB 中创建 MySQL“连接”。它不是 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 的字符串存储在数组中(而不是作为对象)。如果需要,您还可以存储对象 ID 而不是字符串。以下是用户的示例架构:

{
    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'
    }
}

【讨论】:

    猜你喜欢
    • 2013-03-22
    • 2018-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-02
    • 2023-02-07
    • 2011-09-26
    相关资源
    最近更新 更多