MongoDB控制台上重复的BinData字段

时间:2014-08-11 17:01:02

标签: mongodb

我有这样的文档结构。

doc {
   "_id": "customized str id"
   "data": "BinData(0,"base64String");
}

db.test.find("_id":"1234-test").forEach(
    function(doc) {
      db.test.insert({_id":"1235-test"},{"data":doc.data});
    }
);

我也试过了。

db.test.find("_id":"1234-test").forEach(
    function(doc) {
      db.test.insert({_id":"1235-test"},{"data":new BinData(0,doc.data)});
      or db.test.insert({_id":"1235-test"},{"data":{"$binary":doc.data,"$type":0}});
    }
);

除二进制字段外的结果返回。 有没有办法将二进制字段复制到重复的文档? 提前谢谢。

1 个答案:

答案 0 :(得分:1)

这里有两件事错。

首先,insert()接受一个参数,即要插入的文档。 (你可能想要更新/ upsert吗?)所以你想要:

db.test.insert({_id":"1235-test", "data": doc.data})

其次,当数据来自文档时,数据已经是二进制BSON类型,因此您不需要对其进行编码或将其包装为BinData或其他任何内容。

> db.test.find({"_id": "1234-test"}).next().data
BinData(0,"base64String")
> typeof(db.test.find({"_id": "1234-test"}).next().data)
object

因此,要将其从一个文档复制到新文档:

db.test.find({"_id": "1234-test"}).forEach( function(doc) {
    db.test.insert({"_id": "1235-test" , "data": doc.data})
})