【问题标题】:Extract only value in key value pair in $project in mongodb aggregate仅提取 mongodb 聚合中 $project 中键值对中的值
【发布时间】: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


【解决方案1】:

你可以尝试如下:

db.collection.aggregate({
  $project: {
    name: 1,
    "partners.country": "$partners.address.country", // a new field(country) will be created & a value will be assigned from given field
    "partners.partnerName": 1
  }
})

测试: MongoDB-Playground

【讨论】:

  • 成功了。但是如果假设,我们有一个地址为空,那么它会产生错误吗?
  • @SHIVAMSHARMA:MongoDB 应该忽略这种情况!你可以在操场上试试..
猜你喜欢
  • 2021-07-27
  • 1970-01-01
  • 2015-07-04
  • 2016-07-03
  • 2016-07-03
  • 2021-09-30
  • 2012-10-24
  • 2019-03-15
  • 2013-06-06
相关资源
最近更新 更多