我有一个包含一些文档的集合(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请求中执行此操作?
答案 0 :(得分:2)
感谢professor79
帮助我解决了很多问题。
经过大量努力,找到了查询。我们使用聚合框架才能成功。
所需的仅有2个聚合是$project
和$out
。 $out
会自动处理_id
文档中的新notification
。
鉴于这个名为user
的集合:
{
_id: ObjectId("56d45406be05db4022be51f9"),
morecontent : ""
},
{
_id: ObjectId("56d45406be05db3021be32e3"),
morecontent : ""
}
我们希望为msg
集合中的每个文档创建包含相同type
和user
字段的通知。
每个通知都会放在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"
}
答案 1 :(得分:1)
由于我们有一些聊天来澄清问题:
执行此操作服务器端需要执行以下步骤:
- 第一步 - 匹配>获得用户ID
- 根据需要将项目标识为新文档
- out - >在通知集合中存储输出
醇>