[英]Mongoose find in object array value
Article对象数组的示例:
[
{
"_id": "72",
"title": "Some title",
"comments": [
{
"title": "title 1",
"_id": "0",
},
{
"title": "title 2",
"_id": "1",
},
{
"title": "title 3",
"_id": "2",
}
]
},
(...)
]
我想按他们的评论标题找到一些文章(已填充)
var ArticleSchema = new Schema({
title: { type: String },
comments: [{ type: Schema.ObjectId, ref: 'Comment' }]
});
我尝试了很多类似的事情:
var options = {
criteria: {
'comments.title': regex
}
};
Article
.find(options.criteria, function (err, articles) {
if (err) throw err;
res.json(articles);
})
.populate('comments');
但不起作用...
谢谢
这是我的新代码:三个嵌套的find()和两个forEach()
更新(或类似内容)中的代码是使用当前架构进行操作的唯一方法。 但是,我将提出另一个选项,该选项可能会也可能不会与您的其余用例一起使用。
首先,为了确保我们都在同一页上,我相信您当前的设置在保存到数据库时实际上看起来像这样:
文章收藏(单项)
{
_id: ObjectId("566d820ff8633ffc494998c5"),
title: "Example Post",
comments: [
ObjectId("eed7ceadc82d23441cdbab8c")
]
}
评论集(单项)
{
_id: ObjectId("eed7ceadc82d23441cdbab8c"),
title: "Example Comment on Example Post"
}
当您ref
另一个模式时,它就是这样工作的。 我提出这一点是因为这与您的文章对象示例不同。
与关系数据库(例如MySQL)不同,MongoDB没有联接。 通过运行查询,然后为所有注释ID运行find
命令,可以从本质上填充。 但是,MongoDB有子文档。 如果要将ArticleSchema更改为以下内容:
var ArticleSchema = new Schema({
title: { type: String },
comments: [ CommentSchema ]
});
数据库中的数据结构将与您的示例匹配,并且由于所有信息都在一个集合中,因此您可以轻松地执行要尝试的搜索。
但是,这可能会使您执行其他查询更加困难,因此取决于您的用例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.