Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.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
Mongodb 如何返回数组字段';s的大小是否大于给定的数字?_Mongodb_Mongodb Query_Aggregation Framework - Fatal编程技术网

Mongodb 如何返回数组字段';s的大小是否大于给定的数字?

Mongodb 如何返回数组字段';s的大小是否大于给定的数字?,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我有一份像这样的文件 { "_id": ObjectId('56a77bfae0ce9f6a738cb2b7'), "nameIdentity": [ { "givenNameOne": "LATANYA", "givenNameThree": "BIZOR", "lastName": "BIZOR", "sourceReferenceId": [

我有一份像这样的文件

{
    "_id": ObjectId('56a77bfae0ce9f6a738cb2b7'),
    "nameIdentity": [
        {
            "givenNameOne": "LATANYA",
            "givenNameThree": "BIZOR",
            "lastName": "BIZOR",
            "sourceReferenceId": [
                {
                    "sourceReferenceId": "56a77bfae0ce9f6a738cb2b5",
                    "sourceName": "A"
                },
                {
                    "sourceReferenceId": "56a77bfae0ce9f6a738cb2b5",
                    "sourceName": "B"
                }
            ]
        }
    ]
}
nameIdentity是一个数组,sourceReferenceId是nameIdentity内部的嵌套数组。我正在尝试获取sourceReferenceId大小大于2的文档。 我以前是这样做的:

db.entity.aggregate(
   [
      {
         $project: {
            nameIdentity_count: {$size: "$nameIdentity.sourceReferenceId"}
         }
      },
      {
        "$match": {
            "nameIdentity_count": { "$gte": 2 }
         }
    }
   ]
)
这不符合预期,即使只有一个soureReferenceId,它也会提供文档。有人能告诉我哪里出了问题吗?

您需要使用和操作员。此外,如果您只需要
find()
那些“sourceReferenceId”大小大于
2的文档,则不需要对此进行聚合

db.collection.find({“nameIdentity.sourceReferenceId.2”:{“$exists”:true})
但如果您确实需要聚合数据,则:

db.collection.aggregate([
{“$match”:{“nameIdentity.sourceReferenceId.2”:{“$exists”:true}}
])
还有一个设计问题,因为如果字段的值始终为一个元素数组,则没有任何意义。您应该考虑更改文档结构,使其看起来像:

{
“_id”:ObjectId('56a77bfae0ce9f6a738cb2b7'),
“givenNameOne”:“LATANYA”,
“吉文那树”:“比索”,
“姓氏”:“比索”,
“sourceReferenceId”:[
{
“sourceReferenceId:“56a77bfae0ce9f6a738cb2b5”,
“sourceName”:“A”
},
{
“sourceReferenceId:“56a77bfae0ce9f6a738cb2b5”,
“sourceName”:“B”
}
]
}
并根据您尝试执行的操作使用以下查询

db.collection.find({“sourceReferenceId.2”:{“$exists”:true})

db.collection.aggregate([
{“$match”:{“sourceReferenceId.2”:{“$exists”:true}}
])
您可以将$gt与一起使用。返回字段“items”长度大于1的所有文档:

db.collection.find({"items": {$gt: {$size: 1}}})

您需要使用
$size
获取项目数组的大小,并使用
$gt
将项目数组的大小与0进行比较

db.collection.find({"items":{$gt:[{$size:"items"},0]}})

你是说数组长度大于2吗
我正在尝试获取sourceReferenceId大小大于2的文档
是否为
nameIdentity
一个元素数组?如果不是,如果有一个子文档的
sourceReferenceId
大小为
$lt
2,您想做什么?查询的预期结果是什么?@styopdev是的,我指的是数组length@user3100115名称标识是一个单元素数组。如果大小为$lt 2,请忽略。仅显示数组大小为的文档$gt2@ShaikMujahidAli请编辑您的问题并明确添加以下事实:
nameIdentity
是一个元素数组。我也相信你有一个设计问题,因为有一个值总是一个元素数组的字段没有任何意义。