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 请求中做到这一点吗?
因为我们有一些聊天来澄清问题:
服务器端执行此操作所需的步骤:
- first step - match > get users id
- project ids to new documents as required
- out -> store output in notification collection
感谢 professor79
帮我解决了很多问题。
经过一番努力,查询找到了。为了成功,我们使用了聚合框架。
唯一需要的 2 个聚合是 $project
和 $out
。 $out
将自动处理 notification
文档中的新 _id
。
鉴于此集合名为 user
:
{
_id: ObjectId("56d45406be05db4022be51f9"),
morecontent : ""
},
{
_id: ObjectId("56d45406be05db3021be32e3"),
morecontent : ""
}
我们想为 user
集合中的每个文档创建一个包含相同 msg
和 type
字段的通知。
每个通知都将在 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"
}
我有一个集合 (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 请求中做到这一点吗?
因为我们有一些聊天来澄清问题:
服务器端执行此操作所需的步骤:
- first step - match > get users id
- project ids to new documents as required
- out -> store output in notification collection
感谢 professor79
帮我解决了很多问题。
经过一番努力,查询找到了。为了成功,我们使用了聚合框架。
唯一需要的 2 个聚合是 $project
和 $out
。 $out
将自动处理 notification
文档中的新 _id
。
鉴于此集合名为 user
:
{
_id: ObjectId("56d45406be05db4022be51f9"),
morecontent : ""
},
{
_id: ObjectId("56d45406be05db3021be32e3"),
morecontent : ""
}
我们想为 user
集合中的每个文档创建一个包含相同 msg
和 type
字段的通知。
每个通知都将在 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"
}