首页 > 解决方案 > 在对象数组中填充后查找

问题描述

我想根据它的“guess.body”“找到”以下项目:

{
        
        "guess": [
           
            {
                "body": "findme",
            }
        ],
        "_id": "608ee73b18a16e39e809203f"
}

此项目位于名为“ask”的集合中,具有以下模型:

const askSchema = new Schema ({
guess: [{type:Schema.Types.ObjectId, ref:'guess'}],

})

为了做到这一点,我尝试了 2 个查询:

返回一个空数组

返回“1”。

有人可以告诉我我做错了什么吗?

谢谢!

标签: mongoose

解决方案


我倾向于同意Find after populate mongoose中提出的解决方案,但是,如果对于您的特定用例,您可以通过简单的聚合管道获得:

$unwind:填充猜测字段。
$lookup: 执行左外连接。
$match: 最终匹配您的搜索词。

db.ask.aggregate({
  $unwind: "$guess"
},
{
  $lookup: {
    from: "guess",
    localField: "guess",
    foreignField: "_id",
    as: "guess"
  }
},
{
  $match: {
    "guess.body": "test"
  }
})

这是一个工作片段:https ://mongoplayground.net/p/bJgC4rSvb_9


推荐阅读