我有一份像这样的文件
{
"_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 }
}
}
]
)
这并不像预期的那样工作,它提供的文档甚至只有一个来源参考ID。有人能告诉我我哪里错了吗?
5条答案
按热度按时间sigwle7e1#
您需要使用点符号和
$exists
运算符。此外,如果您只需要find()
那些“SourceReferenceID”大小大于2
的文档,则不需要为此进行聚合但如果您确实需要聚合您的数据,那么:
此外,您还有一个设计问题,因为值始终为一个元素数组的字段没有任何意义。您应该考虑更改您的文档结构,使其如下所示:
并根据您要做的事情使用以下查询。
或
9q78igpj2#
以下是查询的使用方式:
<collection>
:您的收藏<column>
:您的列的名称dffbzjpn3#
您可以将
$expr
与$size
一起使用。jgovgodb4#
您可以将$gt与$size一起使用。返回字段“Items”的长度大于1的所有文档:
eqqqjvef5#
您需要使用
$size
获取项目数组的大小,并使用$gt
将项目数组的大小与0进行比较。