Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.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 - Fatal编程技术网

Mongodb-删除嵌入文档中的一些数组元素

Mongodb-删除嵌入文档中的一些数组元素,mongodb,Mongodb,有两种文档。 类型1。文档包含MCN-ONE、MCN-TWO、MCN-three或all 3以及其他值 2.另一种类型的文档不包含这些值中的任何值。 首先,我想得到那些数组元素为1或2或全部为3的文档。然后我想保留MCN-1,MCN-2,MCN-3并批量删除所有其他CCC-ALARM…等。你能帮我写这个查询吗?下面提到的文件属于类型1 { "_id" : ObjectId("5d721f5296eaaafd1df263e8"), "assetId" : "ALL", "createdTime"

有两种文档。 类型1。文档包含MCN-ONE、MCN-TWO、MCN-three或all 3以及其他值 2.另一种类型的文档不包含这些值中的任何值。 首先,我想得到那些数组元素为1或2或全部为3的文档。然后我想保留MCN-1,MCN-2,MCN-3并批量删除所有其他CCC-ALARM…等。你能帮我写这个查询吗?下面提到的文件属于类型1

{
"_id" : ObjectId("5d721f5296eaaafd1df263e8"),
"assetId" : "ALL",
"createdTime" : ISODate("2019-09-06T08:56:50.065Z"),
"default" : false,
"lastUpdatedTime" : ISODate("2019-09-06T09:11:35.463Z"),
"preferences" : {
    "MCN-TWO" : [ 
        "TEST"
    ],
    "MCN-ONE" : [ 
        "TEST", 
        "TEST", 
        "TEST"
    ],
    "MCN-THREE" : [ 
        "TEST"
    ],
    "CCC-ALARM" : [ 
        "TEST"
    ],
    "SSD-ALARM" : [ 
        "TEST"
    ],
    "TFT-ALARM" : [ 
        "TEST", 
        "TEST"
    ],
    "REC-WARN" : []
}
}

通用方法是使用$objectToArray转换首选项子文档,然后使用$filter、$map或$reduce过滤所需元素,并使用$arrayToObject转换回。但是,您的需求是获取元素MCN-1、MCN-2、MCN-3。最简单的方法是更新元素首选项,只替换为MCN-ONE、MCN-TWO、MCN-THREE的conten。这可以通过以下聚合完成:

要筛选文档,请设置$match阶段:


你能解释一下这个问题吗?谢谢你的解释。看起来我没有正确解释我的用例。更新了问题。根据你所问的,解决方案仍然是一样的。但是我怀疑,上面的查询也会更新我不想接触的类型2文档。我错了吗?看看我的答案$集合是在MongoDB 4.2中添加的,请改用$addFields。
db.collection.aggregate(
   [
      {
         $match: {
            $expr: {
               $or: [
                  { $ne: ["$preferences.MCN-ONE", null] },
                  { $ne: ["$preferences.MCN-TWO", null] },
                  { $ne: ["$preferences.MCN-THREE", null] }
               ]
            }
         }
      },
      {
         $set: {
            preferences: {
               $mergeObjects: [
                  { "MCN-ONE": "$preferences.MCN-ONE" },
                  { "MCN-TWO": "$preferences.MCN-TWO" },
                  { "MCN-THREE": "$preferences.MCN-THREE" }
               ]
            }
         }
      }
   ]
)