从MongoDB文档中的JSON数组字段中删除具有特定字段类型的JSON对象
给定一个集合,其中包含包含JSON对象(键值对)的数组字段的文档,例如: 更新后,相同的文档应如下所示:从MongoDB文档中的JSON数组字段中删除具有特定字段类型的JSON对象,mongodb,mongodb-query,Mongodb,Mongodb Query,给定一个集合,其中包含包含JSON对象(键值对)的数组字段的文档,例如: 更新后,相同的文档应如下所示: { ..., arr : [{key: val}]} arr字段中的文档: {key:NumberLong(100)} 应该删除 是否可以使用MongoDB$运营商进行此操作? 我尝试使用以下代码,但无效: db.coll.find({}).forEach( function(doc) { var objs = doc.arr; for(var i = objs.le
{ ..., arr : [{key: val}]}
arr字段中的文档:
{key:NumberLong(100)}
应该删除
是否可以使用MongoDB$运营商进行此操作?
我尝试使用以下代码,但无效:
db.coll.find({}).forEach( function(doc) {
var objs = doc.arr;
for(var i = objs.length; i--;){
if (typeof(objs[i].ts) == NumberLong)
objs.splice(i,1);
}
db.coll.save(doc);
})
我想您希望从如下数组中删除数据:
{
"field" : "aaa",
"list" : [ "aaa", NumberLong(123), "bbb", NumberLong(456) ]
}
可以使用,因为它将查询表达式作为参数
db.collection.update({ },{ "$pull": { "list": {"$type": 18 } } })
编辑 因为问题已经改变了,所以答案仍然没有多大变化:
{
"list" : [
{ "key" : "val" },
{ "key" : NumberLong(100) },
{ "key" : NumberLong(123) }
]
}
基本相同的查询:
db.list.update({ }, { "$pull": { "list": { "key": {"$type": 18 } } } })
然后删除所有NumberLong()
类型
将
{“multi”:true}
添加到您希望在多个文档上执行此操作的位置
因此,为了匹配“NumberLong”元素,它使用了64位整数。每个“类型”的值都在手册页上
操作员不适合这里,因为:
false
,也只能匹配数组中匹配的第一个元素。无论如何,您没有移除该项目,仍然需要使用pulltypeof()
不会作为对象以外的任何对象返回,而对象就是JavaScript实现的对象。你必须用另一种方式进行测试
但是不要。使用本机更新方法是最好的方法。谢谢。对不起,我的问题搞错了。数组包含JSON对象。@user1264304,这对答案没有任何实际影响。我确实添加了您的具体示例,以向您展示如何。
db.list.update({ }, { "$pull": { "list": { "key": {"$type": 18 } } } })