我正在研究nodejs / express
我想在mongoose中删除数组中的元素
我有这种格式的文件
{
"_id" : ObjectId("5a2e19223e50551504b316c0"),
"username" : "nikhil",
"email" : "nikhil@itradicals.com",
"password" : "$2a$10$f3NvrTywIezlzKcZLWSU0O98gn6Mc.Q8B0ZNEDG2F66f4rwyo65Yu",
"companyname" : "itr",
"role" : "vendor",
"verify" : "true",
"createddate" : ISODate("2017-12-10T18:30:00.000+0000"),
"account" : [
{
"Region" : [
"North America",
"Africa",
"Asia"
]
},
{
"Category" : [
"Group 1",
"Group 2",
"Group 3"
]
}
]
}
我想只使用mongoose查询删除Region字段 danyamically数据,因此用户可以删除任何数组,它是Region或 类别。我得到了我想在参数中删除的数组名称 "字段&#34 ;.
module.exports.setupAccount = function(id,field,callback){
var query = { _id: id};
User.findOneAndUpdate(query,{ $set: { account.Region:[] }}, callback);
}
我是nodejs和mongoose的新手 提前谢谢
答案 0 :(得分:1)
您可以使用以下功能。
使用计算属性名称动态传递字段以取消设置和查询表达式。
验证数组是否存在,然后$unset
删除数组。
$位置运算符根据查询条件动态定位数组。如果知道阵列位置,则可以对数组索引进行硬编码。
module.exports.setupAccount = function(id, field, callback){
var query = { "_id": id, ['account.' + field]:{"$exists":true}};
var unset = {"$unset":{['account.$.' + field]:""}};
User.findOneAndUpdate(query, unset, callback);
}
答案 1 :(得分:1)
如果您不想在删除字段后保留空文档,只需$pull数组中的整个元素:
module.exports.setupAccount = function(id,field,callback){
var query = { _id: id };
User.findOneAndUpdate(query, { $pull: { "account": { field: { $exists: true } } } }, callback);
}