0

首先,我是 MongoDB 新手,所以对于你们中的一些人来说,这个问题可能很容易回答。我正在尝试创建一个数组或嵌入文档,其中包含我的集合中的现有字段。换句话说,假设我有一个包含“borough”、“street”和“zipcode”字段的集合。我想创建一个名为“Location”的嵌入式文档,然后将这三个字段移至该文档。这可能吗?以下是我尝试实现这一目标的众多不同方法之一:

db.cooking.aggregate([{$set:{"borough":"$borough", "street":"$street", "zipcode":"$zipcode"}},{$out:"Location"}])

然后我将使用db.Location.copyTo(cooking)表达式将新创建的聚合集合 "Location" 中的数据添加到主集合"cooking"。当然,我必须从烹饪集合中删除现有的三个字段,因为我在嵌入文档位置中有相同的信息,以避免重复数据。

4

1 回答 1

0

您可以使用以下方法之一创建包含现有字段的嵌入式文档:

假设您有一个包含以下文档的集合:

{ _id: 1, fld1: 12, fld2: "red" },
{ _id: 2, fld1: 9, fld2: "blue" },
{ _id: 3, fld1: 34, fld2: "green" }

并且您想创建一个以location字段fld1和命名的嵌入式文档fld2;以下聚合将做到这一点:

db.test.aggregate( [
  { $project: { "location.fld1": "$fld1", "location.fld2": "$fld2" } },
  { $out: "test" }
] )

请注意,原始集合test将被覆盖,如下所示:

{ "_id" : 1, "location" : { "fld1" : 12, "fld2" : "red" } }
{ "_id" : 2, "location" : { "fld1" : 9, "fld2" : "blue" } }
{ "_id" : 3, "location" : { "fld1" : 34, "fld2" : "green" } }


第二种方法:

这要求您使用 MongoDB 版本4.2。此更新查询仅修改同一集合中的现有文档(结果与上述相同):

db.test.updateMany(
  { },
  [
      { $set: { "location.fld1": "$fld1", "location.fld2": "$fld2" } },
      { $unset: [ "fld1", "fld2" ] }
  ]
)
于 2019-12-13T04:07:23.877 回答