MongoError:位置运算符未从查询中找到所需的匹配项. at Function.create()



如果MongoDB中尚不存在,我正在尝试将值更新为对象数组(用户(。这是我的架构:

ownerid:{
type: Number,
required: 'This field is required'
},
name:{
type: String
},
capacity:{
type: Number
},
basePrice:{
type: Number 
},
users:[{
id: Number,
price: Number,
target: Number,
frequency: Number
}],
filePath:{
type: String
},
status:{
type: String
}
}); 

以下是我的路由器方法:

app.post('/userBid',urlEncodedParser,function(req,res){
resName=req.body.resName;
console.log(resName);
Resource.find({"name":resName},{"users.id": userid},function(err,existingUser){
if (!existingUser){
console.log("already in queue");
//res.render('userHome.ejs');
}
else{
console.log("in update");
Resource.update({'name': resName},
{'$set': {
'users.$.frequency': 1,
'users.$.id': userid,
'users.$.price': req.body.price,
'users.$.target': req.body.target
}},{'multi': true},
function(err,model) {
if(err){
console.log(err);
return res.send(err);
}
return res.json(model);
});
}
});

});

我试过使用$push但这似乎也不起作用。此外,我不能使用"0"而不是"$",因为用户将插入多个用户,我需要将它们全部存储。

问题 :

我们使用 $ 的原因是更新数组字段中满足我们条件的特定对象/几个特定对象。因此,当您使用任何位置运算符(如$$[](时,在查询的过滤器部分.update({filterPart},{updatePart})您需要使用过滤器来查找数组中的特定对象。因此,例如id字段在数组中是唯一users那么您可以使用它来过滤/查找需要更新的对象。

试试下面的代码:

app.post("/userBid", urlEncodedParser, function (req, res) {
resName = req.body.resName;
console.log(resName);
/** Use findOne if `name` is unique.
* Cause `existingUser` will be array, instead findOne will return an object or null - So you can just do if(existingUser)to check true values  */
Resource.find({ name: resName }, { "users.id": userid }, function (
err,
existingUser
) {
if (!existingUser) {
console.log("already in queue");
//res.render('userHome.ejs');
} else {
console.log("in update");
Resource.update(
{ name: resName, "users.id": userid }, /** `"users.id": userid` is the only change needed */
{
$set: {
"users.$.frequency": 1,
"users.$.id": userid,
"users.$.price": req.body.price,
"users.$.target": req.body.target,
},
},
{ multi: true },
function (err, model) {
if (err) {
console.log(err);
return res.send(err);
}
return res.json(model);
}
);
}
});
});

相关内容

最新更新