【发布时间】:2019-04-20 18:48:12
【问题描述】:
我在集合“事件”中有一个文档,其结构如下:
{
"_id" : "abc",
"text" : "some text",
}
我希望通过插入一个名为 guestOwner 的数组来更新文档。我想要的结果会像这样更新文档:
{
"_id" : "abc",
"text" : "some text",
"guestOwner" : [
{
"name" : "JACK BLACK",
"guests" : [
"GUEST1",
"GUEST2"
]
}
]
}
所以我尝试了以下内容的 mongo 更新:
db.events.update({ _id: eventid }, { $push: { guestOwner: { name: username, guests: allGuests } } });
其中 'username' 是一个字符串,而 'allGuests' 是一个名称数组 ["Guest1", "Guest2"]
对我来说,问题是当文档发生后续更新时,如果名称相同,我想将新的“allGuests”数组推送到现有数组中。例如,如果使用 'allGuests' = ["GUEST3"] 进行第二次更新,并且使用相同的名称 = "JACK BLACK",我希望文档为:
{
"_id" : "abc",
"text" : "some text",
"guestOwner" : [
{
"name" : "JACK BLACK",
"guests" : [
"GUEST1",
"GUEST2"
"GUEST3"
]
}
]
}
但是,如果使用不同的名称更新文档 = 'JOHN SMITH' 其中 allGuests 数组 = ["GUEST3"],它将创建:
{
"_id" : "abc",
"text" : "some text",
"guestOwner" : [
{
"name" : "JACK BLACK",
"guests" : [
"GUEST1",
"GUEST2"
]
},
{
"name" : "JOHN SMITH",
"guests" : [
"GUEST3"
]
}
]
}
我是否需要围绕 mongo 更新的条件语句来检查 guestOwner[0].name?不确定 mongo 是否可以自己执行此操作,或者是否需要一堆逻辑。
【问题讨论】:
标签: mongodb