Javascript mongoose-删除文档的数组元素,从数组中仅选择一个对象
我被困在这种情况下,无法猜测如何从没有键的数组中选择性地提取元素 我有一个像本例中那样组织的集合,并映射到猫鼬上:Javascript mongoose-删除文档的数组元素,从数组中仅选择一个对象,javascript,node.js,mongodb,mongoose,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是一个
const userSchema = mongoose.Schema({
id: { type: String, required: true, unique: true },
site: { type: String, required: true },
employees: { type: Array, required: true}
}
employees是一个数组,包含数量可变的employees对象,没有顺序,其形状如下:
employees: [
{
"name" : "xxx",
"surname" : "yyy",
"email" : "email@address.com",
},
.
.
.
]
我通常通过聚合查询轻松地访问这些数据,以便按照我需要的方式对其进行塑造,但是,我无法通过选择来删除一名员工
我想通过使用它的电子邮件地址来删除整个employee对象,就像我要进行聚合搜索一样,但随后将其删除
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需要一个数组参数,但被指定为null”
这显然是错误的,但想不出更好的办法,有什么线索吗
谢谢 希望这就是你开始工作所需要的
希望,这就是你开始工作所需要的
你的request.params.email是数组吗?参考:否,是否使用数组中的一个元素来定位正确的数组元素是您的请求。params.email数组?参考:否,是我用于定位正确数组元素的数组元素之一。这只会从
employee
对象中删除email
字段,不会删除整个employee
object@rantao你确定?搜索“id”会找到正确的存储桶,然后我需要指向向量中的n元素并删除它,但我不知道索引。我可以在对象内部按值搜索,比如电子邮件。这应该是一个两阶段的过程吗?例如1:获取数组并定义索引号2:拖动数组这只会从employee
对象中删除email
字段,不会删除整个employee
object@rantao你确定吗?搜索“id”会找到正确的bucket,然后我需要指向向量中的n元素并删除它,但我不知道指数。我可以在对象内部按值搜索,比如电子邮件。这应该是一个两阶段的过程吗?比如1:获取数组并定义索引号2:提取数组
db.collection.updateOne({
id: 1
},
{
$pull: {
employee: {
email: "2@address.com"
}
}
})