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