如何更新所有Mongo文档,其中某个字段设置为“null”,或者根本没有值?
我目前有以下代码,但不确定是否正确:
db.collection.update({name: {$eq: null}}, {$set: {name: 'test'}})
如何更新所有Mongo文档,其中某个字段设置为“null”,或者根本没有值?
我目前有以下代码,但不确定是否正确:
db.collection.update({name: {$eq: null}}, {$set: {name: 'test'}})
如果没有名字字段,请尝试:
db.collection.update({"name": {"$exists": false}}, {"$set": {"name": "test"}})
$set
会添加一个具有指定值的新字段,前提是该新字段不违反类型限制。
如果该字段存在但为空或未设置值:
db.collection.update({"name": null}, {"$set": {"name": "test"}})
你可以使用$or
将这两个查询组合起来。db.collection.update(
{
"$or": [
{ "name": { "$exists": false } },
{ "name": null }
]
},
{ "$set": { "name": "test" } }
)
对于MongoDB 3.2及以上版本,请使用updateMany()
函数,它可以基于筛选器在集合中更新多个文档:db.collection.updateMany(
{
"$or": [
{ "name": { "$exists": false } },
{ "name": null }
]
},
{ "$set": { "name": "test" } }
)
试试这个
db.collection.findAndModify({
query: {'$or': [{'name': {$eq: null}}, {'name': {"$exists":false}},{ field: { "$type" : 10} }]},
update: {$set: {name: 'test'}},
});
谢谢
$or
来代替编写两个不同的查询。 - styvanedb.collection.find({ "$or": [ { "name": { "$exists": false } }, { "name": null } ] })
不就等同于db.collection.find({"name": null})
吗? - chridamdb.collection.find({"name": null})
只有在name
存在且为null
时才会返回文档。 - styvanedb.collection.update(<query>, <update>, { upsert: <boolean>, multi: <boolean>, writeConcern: <document> })
,因此{multi: true}
选项应该放在update对象之后。 - chridamupdateMany
而不是 update。 - imalik8088