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
是一个元素数组。我也相信你有一个设计问题,因为有一个值总是一个元素数组的字段没有任何意义。