Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在MongoDB中的嵌套数组中获取子文档?_Python_Arrays_Mongodb - Fatal编程技术网

Python 如何在MongoDB中的嵌套数组中获取子文档?

Python 如何在MongoDB中的嵌套数组中获取子文档?,python,arrays,mongodb,Python,Arrays,Mongodb,我正在尝试获取所有的cid,该文件包含fid 我尝试了这个方法,但是我只得到了第一个匹配,没有{c.$.cid':1}我得到了整个列表我认为根据您的需要,您需要更改集合的结构。正如MongoDb projection param文件所述, $运算符根据查询语句中的某些条件,从集合中的每个文档中投影第一个匹配的数组元素 你可以登记 我认为您需要在阵列之外制作cid。我认为根据您的需要,您需要更改集合的结构。正如MongoDb projection param文件所述, $运算符根据查询语句中的某些

我正在尝试获取所有的cid,该文件包含fid


我尝试了这个方法,但是我只得到了第一个匹配,没有{c.$.cid':1}我得到了整个列表

我认为根据您的需要,您需要更改集合的结构。正如MongoDb projection param文件所述, $运算符根据查询语句中的某些条件,从集合中的每个文档中投影第一个匹配的数组元素 你可以登记


我认为您需要在阵列之外制作cid。

我认为根据您的需要,您需要更改集合的结构。正如MongoDb projection param文件所述, $运算符根据查询语句中的某些条件,从集合中的每个文档中投影第一个匹配的数组元素 你可以登记


我认为您需要在数组之外创建cid。

您可以使用下面的查询

{
    '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} )
要获得以下输出

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()

您可以使用下面的查询

{
    '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} )
要获得以下输出

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()

如果您的目的是仅获取cid,那么下面的查询将起作用

{
    "_id" : ObjectId("5e95ca8801423e0f9af19b4b"),
    "userid" : "5e6f2f38e8cfcfaf34ee76a6",
    "c" : [
        {
            "cid" : 123,
            "flist" : [
                "5e6de87050fba047c4c666e1"
            ]
        },
        {
            "cid" : 321,
            "flist" : [
                "5e6de87050fba047c4c666e1"
            ]
        }
    ]
}
会给你以下的输出

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

{c:{cid:321}

如果您的目的是仅获取cid,那么下面的查询将起作用

{
    "_id" : ObjectId("5e95ca8801423e0f9af19b4b"),
    "userid" : "5e6f2f38e8cfcfaf34ee76a6",
    "c" : [
        {
            "cid" : 123,
            "flist" : [
                "5e6de87050fba047c4c666e1"
            ]
        },
        {
            "cid" : 321,
            "flist" : [
                "5e6de87050fba047c4c666e1"
            ]
        }
    ]
}
会给你以下的输出

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

{c:{cid:321}

请看这篇有类似问题和答案的帖子:。请看这篇有类似问题和答案的帖子:。