【发布时间】:2016-08-05 04:49:41
【问题描述】:
我正在尝试向嵌套的“消息”文档添加一条新消息(键为“3”),但 $addToSet 或 $push 不起作用。是否可以将新的消息元素推送到这样的结构?一开始,messages 属性是一个数组,但我的 mongodb 提供程序将数组转换为这样的结构。仅供参考:我正在通过 node.js 和 mongojs 访问 mongodb,但本地 mongodb 解决方案也将是完美的。
{
"messages" :
{
"0" :
{
"foo": "bar0"
},
"1" :
{
"foo": "bar1"
},
"2" :
{
"foo": "bar2"
},
},
"name" : "MyName"
}
【问题讨论】:
-
$addToSet和$push仅适用于数组(包含在 [] 中)。在您的文档中,messages是一个对象而不是一个数组。因此,您必须使用update语句:db.collection.update({}, {$set:{"messages.3":{"foo":"bar3"}}}) -
我想到了类似的东西,但我必须先获取消息文档的计数,对吧?
-
这就是为什么你应该使用数组来代替。
-
确实,当我通过提供者的编辑器添加文档时,它会将数组转换为这样的文档:/
-
嗯,我正在使用 MongoSoup 的那个。它是德国的 mongodb 提供者。