我有一个名为“code”的密钥集合,其值有时是数据类型为新的Mongoint32(5)的数字,有时是字符串“abcd”。我已经在我的数据库中有两个值。我想要的是把它们变成单一的,即一个字符串。是否可以编写和更新查询以使mongoint32类型为字符串?
感谢 哈里克里希纳
答案 0 :(得分:2)
如果您正在使用shell,则可以执行find / forEach循环来更新它们。
要将集合value
中名为test
的字段从int(类型1)更新为字符串,您可以这样做;
> db.test.find()
{ "_id" : ObjectId("51b83850399aace88ba102d0"), "bop" : "olle", "value" : 1 }
{ "_id" : ObjectId("51b8385b399aace88ba102d2"), "bop" : "pelle" }
{ "_id" : ObjectId("51b83860399aace88ba102d3"), "bop" : "kjell", "value" : "wow" }
> db.test.find({value: {$type:1}}).forEach(function(item) {
item.value=""+item.value;
db.test.save(item);
});
{ "_id" : ObjectId("51b83850399aace88ba102d0"), "bop" : "olle", "value" : "1" }
{ "_id" : ObjectId("51b8385b399aace88ba102d2"), "bop" : "pelle" }
{ "_id" : ObjectId("51b83860399aace88ba102d3"), "bop" : "kjell", "value" : "wow" }
答案 1 :(得分:1)
我同意Joachim Isaksson的回答,我会更改find()以使用只查找那些真正包含该字段的文档的查询(因为您可能拥有没有它的文档 - MongoDB是无模式的)以及,只查找相关字段类型不是字符串的文档。
样品:
// push few docs
db.so.insert({"a":1})
db.so.insert({"a":2})
db.so.insert({"a":"3"})
db.so.insert({"dontFindMe":4})
// this is the filter that make the different
db.so.find({$and:[{a:{$exists:true}},{a:{$not:{$type:2}}}]})
这将只找到相关的2个文档,您将避免不必要的更新操作 在您掌握了相关文档后,将其更新为与Joachim Isaksson解释的相同。