MongoDB:如何访问地图中的数字键

时间:2014-05-15 07:30:11

标签: mongodb subdocument

我的收藏中有以下文件

{ 
    "_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 SyntaxError:意外的数字

我不能将数字作为键吗?

请告诉我如何更新。

1 个答案:

答案 0 :(得分:0)

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

db.coll.update(
          {_id:data._id},
          {$set:{"tags.6":data.tags["6"] }}
);