Mongodb如何计算数组大小?
Mongodb how to calculate array size?
我有两个集合可以从他们那里获取数据,我的第一个集合是 posts
,第二个是 company
,我想列出帖子,以及公司的简要信息 (rating, totalReviews
), 目前我试过的是:
db.getCollection('posts').aggregate([
{"$match":{
// My match conditions
}},
{"$lookup":{
"from":"companies",
"localField":"company.id",
"foreignField":"_id",
"as":"companyDetails"
}},
{"$match":{
"companyDetails":{"$ne":[]}
}},
{"$project":{
"companyDetails.totalReviews":{"$size":{"$ifNull":["$companyDetails.reviews",[]]}}}}
])
在 company
集合中 reviews
字段是一个包含对象的数组。
"reviews" : [
{
"description" : "Five star company",
"userId" : ObjectId("5a82831c0b74a9276c3f826b"),
"_id" : ObjectId("5a9e6d2c38368b365c22a49d"),
"rating" : 4
},
{
"description" : "The best IT solution company.",
"userId" : ObjectId("5a827d868219d03730085803"),
"_id" : ObjectId("5aacb5335b9f3e52dc99e1f2"),
"rating" : 5
}
],
我想要的是获取这个数组的长度,例如它的 2
,但我的查询总是 return 1
,以防 reviews
存在,并且0
不存在。
您可以在项目阶段以下尝试。
自查找 returns 数组以来,使用 $let 获取公司详细信息文档,然后投影以输出评论。
其余代码保持不变。
{
"$project": {
"companyDetails.totalReviews": {
"$size": {
"$ifNull": [
{
"$let": {
"vars": {
"companyDetailOne": {
"$arrayElemAt": [
"$companyDetails",
0
]
}
},
"in": "$$companyDetailOne.reviews"
}
},
[]
]
}
}
}
}
我有两个集合可以从他们那里获取数据,我的第一个集合是 posts
,第二个是 company
,我想列出帖子,以及公司的简要信息 (rating, totalReviews
), 目前我试过的是:
db.getCollection('posts').aggregate([
{"$match":{
// My match conditions
}},
{"$lookup":{
"from":"companies",
"localField":"company.id",
"foreignField":"_id",
"as":"companyDetails"
}},
{"$match":{
"companyDetails":{"$ne":[]}
}},
{"$project":{
"companyDetails.totalReviews":{"$size":{"$ifNull":["$companyDetails.reviews",[]]}}}}
])
在 company
集合中 reviews
字段是一个包含对象的数组。
"reviews" : [
{
"description" : "Five star company",
"userId" : ObjectId("5a82831c0b74a9276c3f826b"),
"_id" : ObjectId("5a9e6d2c38368b365c22a49d"),
"rating" : 4
},
{
"description" : "The best IT solution company.",
"userId" : ObjectId("5a827d868219d03730085803"),
"_id" : ObjectId("5aacb5335b9f3e52dc99e1f2"),
"rating" : 5
}
],
我想要的是获取这个数组的长度,例如它的 2
,但我的查询总是 return 1
,以防 reviews
存在,并且0
不存在。
您可以在项目阶段以下尝试。
自查找 returns 数组以来,使用 $let 获取公司详细信息文档,然后投影以输出评论。
其余代码保持不变。
{
"$project": {
"companyDetails.totalReviews": {
"$size": {
"$ifNull": [
{
"$let": {
"vars": {
"companyDetailOne": {
"$arrayElemAt": [
"$companyDetails",
0
]
}
},
"in": "$$companyDetailOne.reviews"
}
},
[]
]
}
}
}
}