簡體   English   中英

根據父項中的值按ID查找子文檔

[英]Find Subdocument by Id based on value in parent

鑒於我有以下結構的文檔:

{
    selectedId: ObjectId("57b5fb2d7b41dde99009bc75"),
    children: [
        {_id: ObjectId("57b5fb2d7b41dde99009bc75"), val: 10},
        {_id: ObjectId("57b5fb2d7b41dde99009bc75"), val: 20},
    ]
}

如果父值“ selectedId”始終引用子ID之一,那么我如何獲取_id = selectedId的子子文檔?

我嘗試過:

parentModel.findOne({'selectedId': 'this.children._id'})

但是,正如我現在所知道的,第二個字符串被當作文字。 那么,如何在查詢中引用父母的字段呢?

編輯 :顯然,這可以通過兩個查詢來完成,獲取父級的“ selectedId”值,然后再次查詢。 但是,我想在一個查詢中執行此操作。

您可以使用聚合框架,尤其是利用$arrayElemAt$filter運算符返回子子文檔。 以下示例顯示了這一點:

parentModel.aggregate([
    {
        "$project": {
            "children": {
                "$arrayElemAt": [
                    {
                        "$filter": {
                            "input": "$children",
                            "as": "item",
                            "cond": {
                                "$eq": ["$$item._id", "$selectedId"]
                            }
                        }
                    }, 0
                ]
            }
        }
    }
]).exec(callback);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM