我的藏品中有这个文件:
{
"_id" : ObjectId("52718433e18a711923000005"),
"owners" : [
ObjectId("52718433e18a711923000004"),
ObjectId("52ed40dccc5bc50000000003"),
ObjectId("52ed4171abe2780000000003")
]
}
我有以下声明,我试图删除owners
字段中的一个值:
Business.update({_id:req.body._id}, {$pull:{"owners":req.body.userid}}, function(err){
if(err){
res.json(500, {message:"Could not remove user from admin list"});
}else{
res.json(200);
}
});
我知道req.body._id
和req.body.userid
具有有效值:
{ _id: '52718433e18a711923000005',
userid: '52ed4171abe2780000000003' }
其他操作(例如按ID等查找业务)起作用,因此它不是ObjectId格式问题。还有什么呢?
- 编辑:这是我的(缩写)架构定义:
var BusinessSchema = new Schema({
business_name: {type: String, required: true},
owners: {type: Array}
});
答案 0 :(得分:1)
在尝试匹配要拉取的值时,看起来需要转换为ObjectId。但不要搜索。所以这有效:
var ObjectId = require('mongoose').Types.ObjectId;
Business.update({_id:req.body._id}, {$pull:{"owners": new ObjectId(req.body.userid)}}, function(err){
if(err){
res.json(500, {message:"Could not remove user from admin list"});
}else{
res.json(200);
}
});
-
编辑:因此,如果我将架构从owners: {type: Array}
更改为owners: [Schema.Types.ObjectId]
,我可以跳过转换,并且我的原始语句有效。
答案 1 :(得分:1)
您当前的架构没有向Mongoose提供有关owners
数组字段中包含的数据类型的任何指示。如果您希望Mongoose将您的字符串强制转换为ObjectID,则需要在模式中提供类型信息:
var BusinessSchema = new Schema({
business_name: {type: String, required: true},
owners: [{type: Schema.ObjectId}]
});