2014-12-05 46 views
1

我有一个MongoDB数据库,我试图用连接字符串替换特定元素的所有数组。目前,大多数文档都有一串字符串。我需要一个脚本来查找每个包含数组的文档(有些已经手动更新),然后将该数组替换为当前内容的串联。在MongoDB中替换类型

到目前为止,我有:

var cursor = db.recipe.find({ directions: { $type : 4 } }); 
while (cursor.hasNext()) { 
    var doc = cursor.next(); 
    db.recipe.update(
     { _id : doc._id }, 
     { $set : { directions : { $concat : { doc.directions } } } } 
    ); 
}; 

不幸的是,它不断抱怨意外 ''。我假设我正确使用$ concat。

回答

2

$concat是一个聚合运算符。要简单地查找和更新,请使用普通的javascript。

当前,大多数文档都有一个字符串数组。我需要一个脚本,将依次检查仅发现每次有一个数组

的文件当您申请$type:4到一个数组,它如果有任何directions领域内的元素是一个数组,它找到一个它返回true。

例如:对于输入["x","y"]它将返回false,并且对于[["x"],"y"]它将返回true

由于数组只包含字符串,因此需要使用$where运算符来查找类型。

db.recipe.find({$where:"Array.isArray(this.directions)"}).forEach(function(doc){ 
var value = doc.directions.join(); 
db.recipe.update({"_id":doc._id},{$set:{"directions":value}}); 
})