0

我有一个集合,它有一个名为“code”的键,它的值有时是数据类型为 new Mongoint32(5) 的数字,有时是字符串,如“abcd”。我的数据库中已经有这两个值。我想要的是把它们变成一个单一的,即一个字符串。是否可以编写和更新查询以使 mongoint32 类型为 string ?

谢谢哈里克里希纳

4

2 回答 2

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" }
于 2013-06-12T09:03:53.673 回答
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 的说明进行更新。

于 2013-06-12T10:04:15.903 回答