您好,我是第一次在这里发帖。我也是mongodb的新手。我在谷歌搜索但我没有找到答案。目前在我的收藏中我有一个字符串列表
"keepOuts" : [
"198,168,282,115,292,180",
"356,120,466,192,330,252,346,186"
]
我需要一个mongo db查询,它将更新我的集合中的所有文档,例如
"keepOuts" : [
{
"coordinates" : "126,200,166,185,158,236",
"height" : NumberInt(0)
},
{
"coordinates" : "146,141,169,107,192,154",
"height" : NumberInt(0)
}
],
这里对于旧的keepOuts中的每个条目,每个对象都被创建,它将进入键坐标,另外的字段也被设置到具有键高度的同一个对象中。高度默认为0。
我从这个门户获得了查询,它为我提供了拆分数组,但它没有更新集合。查询是
db.quoteDetails1.aggregate([
{"$match":{keepOuts:{ $exists: true}}},
{"$unwind": {path : "$keepOuts"}},
{
$group: {"_id": "$_id",
result:{
$push:{
coordinates:"$keepOuts"}}}}])
谢谢大家。
答案 0 :(得分:0)
试试这个!
db.quoteDetails1.find({}).toArray().forEach(
function (elem) {
for(var i = 0; i < elem.keepOuts.length; ++i) {
var obj = {"coordinates" : elem.keepOuts[i], "height": NumberInt(0)}
elem.keepOuts[i] = obj
}
db.quoteDetails1.update({_id: elem._id}, elem);
});
答案 1 :(得分:0)
我通过以下javascript获得了答案
db.getCollection('quoteDetails').find({keepOuts:{"$exists":true}}).forEach(
function(doc) {
if(doc.keepOuts.length > 0){
var array = doc.keepOuts;
if(typeof array[0] === "string"){
db.quoteDetails.update({"_id":doc._id},{"$set":{keepOuts :
arrayToObj(doc)
}});
}
}
}
);
function arrayToObj(doc){
print("processing for" + doc._id);
var array = doc.keepOuts;
var len = array.length;
var outerArray =[];
for(var i = 0; i<len; i++){
var obj = {};
var curVal = array[i];
obj["coordinates"]=curVal;
obj["height"]=0;
outerArray.push(obj);
}
return outerArray;
}