0

我的收藏中有以下文档

{ 
    "_id" : ObjectId("53732dc386d78e446c73fbb3"),
    "elig" : 18,
    "tags" : { 
        "6" : "49.6", 
        "9" : "657"
    }, 
    "book" : { 
        "type" : "100",
       "id" : "59598699"
    }
}

如果您注意到,标签是键值对,键为数字形式(基本上是 FIX 消息、标签和值对)

我需要将 tags.6 从 String ("49.6") 更新为 Float (49.6)。

当我尝试将 book.type 从“100”更新为 100 时,它起作用了。下面工作。

db.coll.find().forEach(function(data) {
    db.coll.update(
        {_id:data._id},
        {$set:{"book.type":parseFloat(data.book.type) }}
    );
})

但是对于tags.6,:

db.coll.find().forEach(function(data) {
    db.coll.update(
        {_id:data._id},
        {$set:{"tags.6":data.tags.6 }}
    );
})

它给出了错误

2014-05-15T08:23:40.161+0100 语法错误:意外数字

我不能有数字作为键吗?

请让我知道如何更新。

4

1 回答 1

0

问题是您如何访问数据。使用data.tags["6"]而不是data.tags.6. 即这样的更新会起作用:

db.coll.update(
          {_id:data._id},
          {$set:{"tags.6":data.tags["6"] }}
);
于 2014-05-15T07:36:56.287 回答