2013-06-12 74 views
0

我有一个集合,有一个名为被称为“代码”的键,它的值有时是一个数据类型新的Mongoint32(5)的数字,有时和像“abcd” 。我的数据库中已经有两个值。我想要的是把它们变成一个单一的字符串。是否有可能编写和更新查询使mongoint32类型字符串?Mongodb更新查询保留价值和更新数据类型

感谢 哈日克里希纳

+0

您正在使用哪个客户端库? – Tamir

+0

我正在使用mongodb 2.4,php 5和ubuntu 64位 – harikrish

+0

可能重复[MongoDB:如何更改字段的类型?](http://stackoverflow.com/questions/4973095/mongodb-how-to-change字段类型) – WiredPrairie

回答

2

如果您使用的外壳,你可以做一个查找/ 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" } 
+0

使'$ type'成为值'2'。由于OP想要形成'String' – ajduke

+0

我其实误解'$ type'是为了转换为目标类型。没关系 – ajduke

1

我与约阿希姆伊萨克森答案达成一致,我会改变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解释的更新它们。