MongoDB 为另一个集合中的每个文档插入一个文档

MongoDB insert a document for every documents in another collection

我有一个集合 (users),其中包含一些这样的文档:

{
    _id: ObjectId("56d45406be05db4022be51f9"),
    morecontent : ""
},
{
    _id: ObjectId("56d45406be05db3021be32e3"),
    morecontent : ""
}

我想为 user 集合中的每个条目创建一个新文档。 文档将从这样的通知对象创建:

{
    type: 'alert',
    msg: 'This is important'
}

集合 notifications 应如下所示:

{
    _id: ObjectId("56d45406be05db3021bf20a1"),
    someoldcontent: "This was here before the request"
},
{
    _id : ObjectId("56d45406be05db4022be20b1"),
    user: ObjectId("56d45406be05db4022be51f9"),
    type: 'alert',
    msg: 'This is important'
},
{
    _id : ObjectId("56d45406be05db3021be32e3"),
    user: ObjectId("56d45406be05db3021be32e3"),
    type: 'alert',
    msg: 'This is important'
}

有什么方法可以在 mongodb 请求中做到这一点吗?

因为我们有一些聊天来澄清问题:

服务器端执行此操作所需的步骤:

  1. first step - match > get users id
  2. project ids to new documents as required
  3. out -> store output in notification collection

感谢 professor79 帮我解决了很多问题。

经过一番努力,查询找到了。为了成功,我们使用了聚合框架。

唯一需要的 2 个聚合是 $project$out$out 将自动处理 notification 文档中的新 _id

鉴于此集合名为 user :

{
    _id: ObjectId("56d45406be05db4022be51f9"),
    morecontent : ""
},
{
    _id: ObjectId("56d45406be05db3021be32e3"),
    morecontent : ""
}

我们想为 user 集合中的每个文档创建一个包含相同 msgtype 字段的通知。 每个通知都将在 notifications 集合中,并将其对应的 userId.

作为参考

这里是实现这样的结果的查询:

db.user.aggregate([
    {
        $project: {
            userId: '$_id',
            type: { $literal: 'danger' },
            msg: { $literal: 'This is a message' },
        },
    },
    { $out: 'notifications' },
])

notifications 集合中的输出:

{
    "_id" : ObjectId("56d6112e197b4ea11a87de1a"),
    "userId" : ObjectId("56d45406be05db4022be51f9"),
    "type" : "danger",
    "msg" : "This is a message"
},
{
    "_id" : ObjectId("56d6112e197b4ea11a87de1b"),
    "userId" : ObjectId("56d45406be05db3021be32e3"),
    "type" : "danger",
    "msg" : "This is a message"
}