Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
交换MongoDB数组中的值_Mongodb_Mongodb Query - Fatal编程技术网

交换MongoDB数组中的值

交换MongoDB数组中的值,mongodb,mongodb-query,Mongodb,Mongodb Query,在我的MongoDb集合中有一个类似于“geo:[39.897867,-121.8909978]的数组 我需要做的是交换数组中的值 请帮我做这个。 谢谢…您可以使用数组索引进行交换。首先找到它并交换它 db.myCollection.find().forEach(function(doc){ db.myCollection.update({_id: doc._id}, {$set: {"geo.0": doc.geo[1], "geo.1": doc.geo[

在我的MongoDb集合中有一个类似于
“geo:[39.897867,-121.8909978]
的数组

我需要做的是交换数组中的值

请帮我做这个。
谢谢…

您可以使用数组索引进行交换。首先找到它并交换它

db.myCollection.find().forEach(function(doc){
        db.myCollection.update({_id: doc._id},
          {$set: {"geo.0": doc.geo[1], "geo.1": doc.geo[0]}})
    })

好吧,既然您似乎没有在明显的迭代循环中挣扎,并且您担心项目的数量,那么让我们看看您的选项:

mapReduce可以是一个用于执行此操作的工具和选项。但请注意,您的文档格式可能不同。因此,如果您可以在应用程序中重命名使用过的集合,这将是一种安全复制集合的方法。但如果你的收藏定期更新,这将不是一个选项

db.collection.mapReduce(
函数(){
var t=this.geo[0];
this.geo[0]=this.geo[1];
this.geo[1]=t;
发射(这个._id,这个);
},
函数(){},
{
“out”:{“replace”:“newcollection”}
}
)  
然后,您可以安全地使用和一个循环来“重新建模”回原始形式:

db.eval(函数(){
db.newcollection.find().forEach(函数(doc){
var newDoc={};
Object.key(doc.value).forEach(函数(key){
newDoc[“key”]=单据值[“key”];
});
db.newcollection.update(doc.\u id,newDoc);
});
})
这将为您提供一个具有其他名称的“固定”集合。您可以将您的应用程序指向该点,但如果您不能,则可以使用:

db.collection.drop();
db.newcollection.rename(“collection”);
但是在整个过程中会有大量的磁盘抖动,当然,在任何情况下都需要为集合重新创建任何索引

此外,您还可以直接访问现有系列:

db.eval(函数(){
db.collection.find().forEach(函数(doc){
db.collection.update(
{{u id:doc.{u id},
{“$set”:{“geo.0”:doc.geo[1],“geo.1”:doc.geo[0]}
);
});
})
但是,请阅读有关这方面的文档。执行此操作时,您无论如何都在锁定数据库。另请查看上的常见问题解答

当然,最安全的做法是使用来自客户机的查找和更新循环,只要该客户机在网络方面尽可能靠近数据库服务器,那么将有大量的有线通信,但它将相当本地化

在一天结束时,如果最安全的方法是不可能的(并且可能是由于您的数据库与外部托管提供商的关系),那么您将不得不在服务器上使用其他更新选项,或者最终使用无线通信


但是至少你有一些选择要考虑。

确切的意思是什么?我们知道您的
lat
long
顺序错误。但是你打算怎么解决呢?有多少张唱片。开发工作还是生产?你的问题很重要。请编辑。这对我们和你都有帮助,你是对的。我需要换一下长期订单。我在开发和生产两方面都要做。我有大约4L的记录。嗯,有一些处理大型更新的选项。我把它们作为答案。考虑一下这些因素,看看什么最适合你的需要。