我正在尝试用Mongo做点什么,但我被卡住了。我确定答案非常简单,但我找不到。非常感谢你的帮助。
我有一份文件(见下文)我想更新。
{
_id: ObjectId("57d52d9c56f0dc1c93254265"),
processus: [
{
action: "action 1",
date: ISODate("2016-08-23T22:00:00Z")
},
{
action: "action 2",
date: ISODate("2016-12-11T23:00:00Z")
}
]
}
更确切地说,我想“更改操作的日期”1.例如,我想让我的文档像这样:
{
_id: ObjectId("57d52d9c56f0dc1c93254265"),
processus: [
{
action: "action 1",
date: "another date"
},
{
action: "action 2",
date: ISODate("2016-12-11T23:00:00Z")
}
]
}
在我的更新声明下面(使用$ push不起作用/同样的事情)
db.collection('...').update(
{ _id : ObjectId(...) },
{ $addToSet: {
processus: {
$each: [ { "action" : "action 1", "date" : "another date" } ],
}
}}
)
确实,最终的文件是:
{
_id: ObjectId("57d52d9c56f0dc1c93254265"),
processus: [
{
action: "action 1",
date: "another date"
},
{
action: "action 1",
date: ISODate("2016-08-23T22:00:00Z")
},
{
action: "action 2",
date: ISODate("2016-12-11T23:00:00Z")
}
]
}
有什么想法吗? 再次感谢。
答案 0 :(得分:1)
为此,您需要使用带有positional operator $
的$ setdb.collection('...').update(
{ _id : ObjectId("..."),
"processus.action": "action 1"
},
{ $set: {
"processus.$.date": "another date"
}
})
位置$运算符标识要更新的数组中的元素,而不显式指定数组中元素的位置。位置运算符充当数组中第一个条目的占位符,该条目与发送的过滤器(查询文档)匹配更新命令。
答案 1 :(得分:0)
您可以将$ set用于带有数字数组键的子文档数组:
db.collection.update({ _id: ... }, { $set: { processus.0.date: another_date }})