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,如何将文档中字段的数据类型从映射更新为数组。 假设以下文档: { "_id" : "someUniqueId:1234567890", "field1" : { "id" : "field1_id1", "type" : "field1_type1" }, "field2" : "field2_value", "field3" : 1680 } 我想更新字段1,使其具有以下值: "field1" : [{

如何将文档中字段的数据类型从映射更新为数组。 假设以下文档:

{
    "_id" : "someUniqueId:1234567890",
    "field1" : {
        "id" : "field1_id1",
        "type" : "field1_type1"
    },
    "field2" : "field2_value",
    "field3" : 1680
}
我想更新字段1,使其具有以下值:

"field1" : [{
        "id" : "field1_id1",
        "type" : "field1_type1"
    }]
我尝试过以下方法:

db.getCollection('collection1').find({_id: "someUniqueId:1234567890"}).forEach(function(result) {
        db.getCollection('collection1').update({_id: result._id}, { $insert: { field1: [{"field1.id": result.field1.id, "field1.type": result.field1.type}] } })
});
另外,我尝试了$push和$addToSet来代替$insert,但没有成功。

我们可以使用它来获得结果

下面的查询进行更改

db.collection_name.update(
  {},
  [{ $set: { field1: ["$field1"] } }],
  { multi: true }
);
查找部分-
{}

我们在这里没有给出选择要更新的特定文档的任何条件,因此更新适用于集合中的所有文档,如果我们想限制更新,请提供选择匹配文档的条件

更新部分-
[{$set:{field1:[“$field1”]}}]

将文档放入数组的工作

multi:true
标志设置为true,以便我们可以更新多个文档

请注意-只在集合中运行一次查询,如果我们多次运行,那么我们将为field1使用嵌套数组


希望能有帮助

为了避免嵌套数组,您应该添加条件
{field1:{$not:{$type:“array”}}
,而不是
{}
条件
{“field1.0”:{$exists:false}
也可以工作,但
{field1:{$type:“obejct”}
不工作。