我有一个集合,有一个名为被称为“代码”的键,它的值有时是一个数据类型新的Mongoint32(5)的数字,有时和像“abcd” 。我的数据库中已经有两个值。我想要的是把它们变成一个单一的字符串。是否有可能编写和更新查询使mongoint32类型字符串?Mongodb更新查询保留价值和更新数据类型
感谢 哈日克里希纳
我有一个集合,有一个名为被称为“代码”的键,它的值有时是一个数据类型新的Mongoint32(5)的数字,有时和像“abcd” 。我的数据库中已经有两个值。我想要的是把它们变成一个单一的字符串。是否有可能编写和更新查询使mongoint32类型字符串?Mongodb更新查询保留价值和更新数据类型
感谢 哈日克里希纳
如果您使用的外壳,你可以做一个查找/ foreach循环更新。
要将集合test
中名为value
的字段从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" }
我与约阿希姆伊萨克森答案达成一致,我会改变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解释的更新它们。
您正在使用哪个客户端库? – Tamir
我正在使用mongodb 2.4,php 5和ubuntu 64位 – harikrish
可能重复[MongoDB:如何更改字段的类型?](http://stackoverflow.com/questions/4973095/mongodb-how-to-change字段类型) – WiredPrairie