如何从Mongo DB中的数组中提取数组

时间:2019-12-25 15:39:25

标签: mongodb

我有一个像这样的嵌套数组

 {
 "_id": "5dff75968102f11e20ae888e",
 "docID": "Employees",
 "data": [
     [
     "234768237",
     "Value1",
     ],
     [
     "234768238",
     "Value2"
     ],
     [
     "234768239",
     "Value3"
     ]
 ]
 }

在嵌套数据数组中,第一个元素是员工ID,例如:234768237。 我想传递一个员工ID数组并删除匹配的ID,例如:[234768237,234768238]

到目前为止我尝试过的事情

    let employeeIDArray =  [234768237, 234768238];
    collection.updateOne(
        { docID: "Employees" },
        {
            $pull: {
                "data.$[]": { "0": { $each: employeeIDArray } }
            }
        }
    );

2 个答案:

答案 0 :(得分:2)

您将关闭,请尝试:

let employeeIDArray =  [234768237, 234768238];
collection.updateOne(
    { docID: "Employees" },
    {
        $pull: {
            "data": { $in: employeeIDArray } 
        }
    }
);

$each修饰符仅适用于$push$addToSet动作,请详细了解here

编辑:

对于嵌套数组,请像这样使用$pullAll而不是$pull

collection.updateOne(
    { docID: "Employees" },
    {
      $pullAll: {
         "data.$[]":  employeeIDArray
    }
});

答案 1 :(得分:0)

如果您使用的是MongoDB的最新版本,则可以使用以下查询通过聚合管道进行更新:

collection.updateOne(
    { docId: "Employees" }, 
    [ { 
        $set: { 
            data: { 
                $filter: { 
                    input: "$data", 
                    cond: { $in: [ { $arrayElemAt: [ "$$this", 0 ] }, [ "234768237", "234768238" ] ] } }
                }
            } 
    } ], 
    { upsert: true }
)