我使用MongoDB作为我的应用程序的日志(log)保管器,然后同步移动客户端.我在NodeJS中设置了以下模型:

var UserArticle = new Schema({
    date: { type: Number, default: Math.round((new Date()).getTime() / 1000) }, //Timestamp!
    user: [{type: Schema.ObjectId, ref: "User"}],
    article: [{type: Schema.ObjectId, ref: "Article"}],
    place: Number,    
    read: Number,     
    starred: Number,   
    source: String
});
mongoose.model("UserArticle",UserArticle);

var Log = new Schema({
    user: [{type: Schema.ObjectId, ref: "User"}],
    action: Number, // O => Insert, 1 => Update, 2 => Delete
    uarticle: [{type: Schema.ObjectId, ref: "UserArticle"}],
    timestamp: { type: Number, default: Math.round((new Date()).getTime() / 1000) }
});
mongoose.model("Log",Log);

当我想要检索日志(log)时,我使用以下代码:


var log = mongoose.model('Log');
log
.where("user", req.session.user)
.desc("timestamp")
.populate("uarticle")
.populate("uarticle.article")
.run(function (err, articles) {
if (err) {
    console.log(err);
        res.send(500);
    return;
}
res.json(articles);

如您所见,我希望mongoose从日志(log)集合中填充"uarticle"字段,然后,我希望填充UserArticle("uarticle")的"article"字段.

但是,使用这段代码,Mongoose只使用UserArticle模型填充"uarticle",而不是uarticle内部的article字段.

可以使用Mongoose和populate()完成吗?或者我应该做些别的事情?

非常感谢.

推荐答案

从我在文档中查看的内容和从您那里听到的信息来看,这是无法实现的,但您可以自己在回调函数中填充"uarticle.article"文档.

然而,我想指出另一个我认为更重要的方面.在集合A中有引用集合B的文档,而在集合B的文档中有另一个引用集合C中的文档.

要么你做得不对(我指的是数据库 struct ),要么你应该在这里使用关系数据库,比如MySQL.MongoDB的强大之处在于,您可以在文档中嵌入更多信息,因此需要进行更少的查询(将数据放在单个集合中).虽然引用某个东西是可以的,但是有一个引用然后又有另一个引用似乎并没有充分利用MongoDB.

也许你想分享一下你的情况和数据库 struct ,这样我们可以帮助你更多.

Mongodb相关问答推荐

防止查找简单字段

MongoDB:删除键上有条件的对象元素

MongoDB Aggregate:查找每个月的交叉日期范围的数量

根据参考图计算子文档列表的最大值

在数组对象 Mongodb 中仅 Select 需要的数组

减法聚合Mongo文档Golang

MongoDb $filter,然后获取非重复计数

如何使用指南针连接到 mongodb replicaset (k8s)

可变用户 Select

MongoDB 将 JSON 字符串转换为数组[{obj1},{obj2}]的实际对象

在mongodb中,如何使用聚合来获取字段之间的对应关系

mongoose默认值等于其他值

什么 Javascript 库可以针对对象判断类似 MongoDB 的查询谓词?

如何在 mongoDB 中聚合巨大的数组?

如何在 MongoDB 聚合查询中使用 $hint?

从 id 删除 PyMongo 中的文档

Mongodb错误:The positional operator did not find the match needed from the query

python + pymongo:如何从 for 循环中在 mongo 中的现有文档上插入新字段

未找到 MongoDB 数据/数据库

带有条件的MongoDB聚合查找