簡體   English   中英

如何在 MongoDB 的嵌套數組中獲取子文檔?

[英]How to get the sub document within a nested array in MongoDB?

{
    'userid' : '5e6f2f38e8cfcfaf34ee76a6',
    'c':[
          {'cid':123 ,'flist':['5e6de87050fba047c4c666e1','5e65e475aa1d2a77e1e7d9b3','5e75e5a02dfcda6e321be941']} ,
          {'cid':321 ,'flist':['5e92533b0f93cb0f6d813631','5e946afbfd003483a47d412b','5e6de87050fba047c4c666e1']} , 
          {'cid':431 ,'flist':['5e65e475aa1d2a77e1e7d9b3','5e946afbfd003483a47d412b','5e75e5a02dfcda6e321be941']} 
        ]
}

userid ='5e6f2f38e8cfcfaf34ee76a6'
fid = '5e6de87050fba047c4c666e1'

db.find({'userid':userid ,'c.flist':{'$eq':fid}} , {'c.$.cid':1} )

我正在嘗試獲取flist包含fid的所有cid

我嘗試了這種方法,但我只得到了沒有{'c.$.cid':1}第一場比賽我得到了整個名單

如果您的意圖是僅獲得 cid,那么下面的查詢將起作用,

db.collection.aggregate([{
    '$match': {
        'userid': '5e6f2f38e8cfcfaf34ee76a6'
    }
},
{
    '$unwind': {
        'path': '$c'
    }
}, {
    '$match': {
        'c.flist': '5e6de87050fba047c4c666e1'
    }
},
{
    '$project': {
        "c.cid": 1,
        "_id": 0
    }
}])

會給你下面 output

{ "c" : { "cid" : "123" } } 

{ "c": { "cid": "321" } }

我認為根據您的需要,您需要更改集合的結構。 正如 MongoDb 投影參數文檔中所述, The $ operator projects the first matching array element from each document in a collection based on some condition from the query statement您可以在https://docs.Z685A5F7CC75B3796F6Ccomman/CCD8401./E000參考/操作員/投影/位置/#project-array-documents

我認為你需要在數組之外制作 cid 。

您可以使用以下查詢

db.collection.aggregate([ { $match: { userid: "5e6f2f38e8cfcfaf34ee76a6", "c.flist": "5e6de87050fba047c4c666e1" } }, { $addFields: { c: { $filter: { input: { $reduce: { input: "$c", initialValue: [], in: { $concatArrays: [ "$$value", [ { cid: "$$this.cid", flist: { $filter: { input: "$$this.flist", as: "item", cond: { $eq: [ "$$item", "5e6de87050fba047c4c666e1" ] } } } } ] ] } } }, as: "item2", cond: { $gt: [ "$$item2.flist", [] ] } } } } } ]).pretty()

得到以下 output

{
    "_id" : ObjectId("5e95ca8801423e0f9af19b4b"),
    "userid" : "5e6f2f38e8cfcfaf34ee76a6",
    "c" : [
        {
            "cid" : 123,
            "flist" : [
                "5e6de87050fba047c4c666e1"
            ]
        },
        {
            "cid" : 321,
            "flist" : [
                "5e6de87050fba047c4c666e1"
            ]
        }
    ]
}

暫無
暫無

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

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