我有一个集合,其中包含以错误顺序输入的位置字段:
location: [38.7633698, -121.2697997]
当我尝试使用...
在场上放置2d索引时db.collection.ensureIndex({'location': '2d'});
...我收到以下错误,因为纬度和经度相反。
"err" : "location object expected, location array not in correct format",
"code" : 13654
如何为mongo shell中的每个文档反转此数组?
答案 0 :(得分:5)
db.loc.find().forEach(function (doc) {
var loc = [ doc.location[1], doc.location[0] ];
db.loc.update(doc, { $set: { location: loc } });
})
答案 1 :(得分:1)
从MongoDB 3.4开始,我们可以使用$reverseArray
运算符来完美地完成这项工作。
db.collection.aggregate(
[
{ "$project": { "location": { "$reverseArray": "$location" } } }
]
)
产生:
{
"_id" : ObjectId("576fdc687d33ed2f37a6d527"),
"location" : [ -121.2697997, 38.7633698 ]
}
要更新集合中的所有文档,您有几个选项。
首先是在管道中添加$out
阶段并替换旧集合。在这种情况下,您需要明确包含$project
离子阶段中的所有其他字段。 $out
阶段看起来像这样:
{ "$out": "collection" }