猫鼬-删除文档的数组元素,仅从数组中选择一个对象

时间:2020-09-14 00:19:29

标签: javascript node.js mongodb mongoose

我坚持这种情况,无法猜测从没有键的数组中选择性提取元素的方式。

我有一个如本例中所示组织的集合,并映射到了猫鼬:

const userSchema = mongoose.Schema({
  id: { type: String, required: true, unique: true },
  site: { type: String, required: true },
  employees: { type: Array, required: true}
}

employees是一个数组,其中包含可变数量的无序雇员对象,其形状如下:

employees: [
    {
        "name" : "xxx",
        "surname" : "yyy",
        "email" : "email@address.com",
        
    },
    .
    .
    .
]

我通常通过聚合查询轻松地访问此数据,以按照我需要的方式对其进行调整,但是,我无法通过选择它来删除一名员工。

我想通过使用电子邮件地址选择整个员工对象来删除整个员工对象,就像我要进行汇总搜索一样,然后删除它。

AccessList.aggregate([
      { '$match': id},
      { '$unwind': '$employees' },
      { '$match': email}])
///then delete this whole object returned

到目前为止,我最好的尝试是使用updateOne,但是它当然会返回错误:

AccessList.updateOne( {'id': request.params.date}, { $pullAll: {'employees.email': request.params.email } } )

“ $ pullAll需要一个数组参数,但被赋予一个空值”

这显然是错误的,但是找不到更好的方法了吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

希望这是开始滚球所需要的...

https://mongoplayground.net/p/Uv8ERuZ_RF3

db.collection.updateOne({
  id: 1
},
{
  $pull: {
    employee: {
      email: "2@address.com"
    }
  }
})