mongodb - 蒙戈 : multiple queries or not?

标签 mongodb node.js

我想知道查询 mongo db 中许多对象的最佳方法,其中每个对象都有一个附加的 _id 数组。我也想抓取引用的对象。对象的架构如下所示:

var headlineSchema = new Schema({
    title : String, 
    source : String,
    edits : Array       // list of edits, stored as an array of _id's
    ...
});

...以及所引用的内容(如果需要):

var messageSchema = new Schema({
    message : String,
    user : String,
    headlineID : ObjectId   // also contains a ref. back to headline it's incl. in
    ...
});

问题的一部分(好吧,取决于我是否想继续走这条路线)是推送消息 ID 不起作用(编辑之后仍然是一个空数组 []):

db.headline.update({_id : headlineid}, {$push: {edits : messageid} }, true);

当我进行查询时,我需要一次获取大约 30 个“标题”,每个标题最多可以包含对 20 或 30 条“消息”的引用。我的问题是,获取所有这些东西的最佳方法是什么?我知道 mongo 不是关系数据库,所以我的目的是首先获取我需要的标题,然后循环遍历所有 30 个标题以获取任何附加消息。

db.headline.find({'date': {$gte: start, $lt: end} }, function (err, docs) {
    if(err) { console.log(err.message); }
    if(docs) { 
        docs.forEach(function(doc){
            doc.edits.forEach(function(ed){
                db.messages.find({_id:ed}, function (err, msg) {
                    // save stuff
                });
            });
        });
    }
});

这似乎是错误的,但我不确定还能如何继续。我是否应该费心保留一系列附加消息?我也没有接受我建立模式的方式。如果有更好的方法来跟踪它们之间的关系,或者有更好的查询来实现此目的,请告诉我。 谢谢

最佳答案

每条消息是否只属于一个标题?如果是这样,您可以将标题 ID 存储为每条消息的一部分。然后对于每个标题,执行以下操作:

db.messages.find({headline_id: current-headline-id-here})

关于mongodb - 蒙戈 : multiple queries or not?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8291846/

相关文章:

javascript - 如何在日期对象上设置 LocaleHours()?

javascript - 使用对象值创建文件夹

mongodb - 好的开源或好的社区版 ETL 工具

node.js - Mongoose - 如何将文档添加到具有该文档 ID 的数组中

javascript - Express Js Mongodb 初始连接设置困难

javascript - 使用 try/catch 和嵌套的 Promise 等待

node.js - Azure Bot Framework 的在线代码编辑器 - 接收错误 : destructure property 'applicationID' of 'undefined' or 'null'

javascript - 如何比较 JSON 对象和 Waterline 模型实例?

javascript - mongodb - 不明白为什么/如何使用 map-reduce

php - MongoDB 从 MySQL 迁移的用例