MongoDB-嵌入,将一个集合插入另一个

时间:2020-01-06 10:04:03

标签: mongodb

如果我有一个类似

的收藏集(例如,人物)
{
   _id: ObjectID("5e12f6260c190f8ee91b162d"),
   name: "Joe Bookreader",
   address: "Highway To Hell 21"
 }

我想删除此地址值,然后将集合(地址)嵌入其中:

               {
                  _id: ObjectID("5e25fg3gjh48ee91b2653"),
                  street: "123 Fake Street",
                  city: "Faketon",
                  state: "MA",
                  zip: "12345"
                }

外观如下:

{
   _id: ObjectID("5e12f6260c190f8ee91b162d"),
   name: "Joe Bookreader",
   address: [
                {
                  street: "123 Fake Street",
                  city: "Faketon",
                  state: "MA",
                  zip: "12345"
                }
              ]
 }

我该怎么做?

会像插入下面的代码一样(或完全不同)插入新列吗?

 var bulkInsert = db.people.initializeUnorderedBulkOp()
 db.addresses.find().forEach(
    function(doc){
      bulkInsert.insert(doc);
    }
  )

任何帮助将不胜感激,谢谢!

1 个答案:

答案 0 :(得分:2)

您可以运行$lookup with empty pipeline将一个(整个集合)嵌入另一个。

db.people.aggregate([
    {
        $lookup: {
            from: "addresses",
            pipeline: [ ],
            as: "addresses"
        }
    }
])

Mongo Playground

然后,您可以使用$out(将输出集合完全替换为聚合结果)或$merge(将聚合结果合并到现有集合中):

编辑:

您可以将$match添加到单个文档而不是整个文档集中:

db.people.aggregate([
    {
        $lookup: {
            from: "addresses",
            pipeline: [ { $match: { street: "123 Fake Street" } } ],
            as: "addresses"
        }
    }
])
相关问题