你好,这是我的文件:
{
"_id" : ObjectId("57b2d706f61d04e8d99dd983"),
"userName" : "a",
"password" : "v",
"addresses" : {
"info" : {
"count" : {
"userAddress" : 0,
"vendorAddress" : 0
}
},
"user" : [],
"vendor" : []
}
}
现在,我希望推送一个地址 供应商子文档数组,将vendorAddress计数增加1 ,一气呵成对象Id 57b2d706f61d04e8d99dd983
为此,我使用以下代码与mongoose:
usersModel.findByIdAndUpdate(
vendorId,
{
"$push" : {
"addresses.vendor" : address
},
$inc : {
"addresses.info.count.vendorAddress" : 1 //--------->(A)
}
},
{
"new": true,
"select" : {
"addresses.vendor" : 1
}
},
function(error, list){
//can return the new doc and all
}
);
假设我的地址是一个带有供应商地址的json,那么这件事就会产生以下异常:
exception: '$inc' is empty. You must specify a field like so: {$inc: {<field>: ...}}
但是我删除了(A)的行并用相同的输入重新运行程序。现在我怀疑的是,尽管事情非常简洁直接。
请提出一些意见。 :)
答案 0 :(得分:1)
感谢大家对这个问题的支持,我发现了这个错误,实际上我的架构定义有一个错误,错误是这样的:
var _info = new Schema({ //---------->(A)
"_id" : false, // ------------> (B)
"addresses" : {
"count" : {
"vendorAddress" : Number
}
}
});
var UserSchema = new Schema({
"userName" : String,
"password" : String,
"info" : _info,
"addresses" : {
"vendor" : [_vendorAddresses] //----> (C)
}
});
仅供参考:_vendorAddresses有一个完美的架构。
现在问题是等式(A)和(B),所以我调试了它,发现我正在创建一个新对象,因为它是新的Schema,如式(A)所示。所以我删除了这两行,发现它现在运行得很好。
答案 1 :(得分:-1)
我认为您应该使用update
查询而不是findByIdAndUpdate
usersModel.update({"_id" : ObjectId("57b2d706f61d04e8d99dd983")}, { $push:{"addresses.vendor":address}, $inc : {"addresses.info.count.vendorAddress" : 1} });