【发布时间】:2020-06-21 02:25:03
【问题描述】:
我正在使用 mongo 3.4
我正在使用 mongodb 的聚合函数。我的问题是在 $project 我的价值为
{ $project: {
"_id": 1,
"name":1 ,
............
............
"partners.address.country": 1,
"partners.partnerName": 1,
} },
{ $match: matchCondition
}
结果,我得到了价值
“合作伙伴”:{“地址”:{“国家”:“”}}
我不希望我只是想要它
“合作伙伴”:{“国家”:“”}
我想跳过地址部分。另外,我不想在结果之后使用.map 函数,因为我在 $project 中有大量数据。
有人可以帮忙吗?
我还有一个问题 这个查询是 4 个集合的连接(另外 2 个我没有提到上面的例子)。我想要我的主要收藏的全部记录和其他收藏的 2-3 条记录,所以,我必须在 $project 中写入每条记录并将其设置为 1。 有没有一种方法可以让我们跳过在 $project 中写入每条记录,并且仍然可以在结果中获取记录? 请帮我! 提前致谢
【问题讨论】:
-
我的回答解释了您的第一个问题,但您的第二个问题有点不清楚,您需要在加入所有集合后提供一些示例数据,并且需要 o/p 才能轻松理解它,如果它变得足够大,我会说提出一个新问题以使其看起来清晰!因此,一般来说,如果您使用
$lookup加入 4 个集合,则每个加入数据将位于相应字段下,该字段是来自各个集合的文档数组,您可以使用$addFields向文档添加新字段 - 所以 $splice 数组并将相应的字段添加到主文档! -
我想包含主集合的所有字段,但问题是我必须在 $project 中写入所有字段并将其分配给 1。但是,我想要一些动态的东西,比如不写名字主要收藏的每个领域,我都想要。
-
在 MongoDB 中,您有两个选项可以转换文档中的字段
$project或$addFields,因此您可以在此处查看 MongoDB 的$addFields:: docs.mongodb.com/manual/reference/operator/aggregation/…
标签: node.js mongodb mongodb-query aggregation-framework