MongoDB - 从单个数组元素中取消设置属性
MongoDB - 从单个数组元素中取消设置属性
如何在Mongo控制台中取消设置单个数组元素的属性。例如,如何取消设置time[1]中的junk属性。
如下所示:
{
"_id" : ObjectId("4d525ab2924f0000000022ad"),
"name" : "hello",
"time" : [
{
"stamp" : "2010-07-01T12:01:03.75+02:00",
"reason" : "new"
},
{
"stamp" : "2010-07-02T16:03:48.187+03:00",
"reason" : "update",
"junk" : "yes"
},
{
"stamp" : "2010-07-02T16:03:48.187+04:00",
"reason" : "update"
},
]
}
问题的出现原因是:在MongoDB中,使用$unset操作符来删除文档中的某个属性。但是,当属性存在于一个数组元素中时,$unset只会从第一个匹配的子文档中删除该属性。
解决方法是:使用占位符$来替代$unset操作符中的数组元素索引,以便删除所有匹配的子文档中的属性。具体代码如下:
db.coll.update({"time.junk": "yes"}, {$unset: {"time.$.junk": 1}});
更多关于MongoDB文档符号表示法的信息,请参阅MongoDB官方文档:dot notation。
另外,以下是Hassek在Stack Overflow上的一个解决方案:stackoverflow.com/questions/19945924/…。