【发布时间】:2018-08-26 07:49:57
【问题描述】:
我有两个集合来从中获取数据,我的第一个集合是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,但我的查询总是返回1,如果reviews 存在,0 不存在。
【问题讨论】:
-
你能告诉我返回你1作为数组长度的查询吗
-
@Kannan 查询我在我的问题中发布的该数据返回评论长度为 1,但如您所见,我的评论数组有两个对象。
标签: mongodb mongoose aggregation-framework lookup