繁体   English   中英

猫鼬在对象数组中查找值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM