具有多个值的 Mongo $addToSet 语法正确
Posted
技术标签:
【中文标题】具有多个值的 Mongo $addToSet 语法正确【英文标题】:Mongo $addToSet with multiple values correct syntax 【发布时间】:2016-03-24 06:54:38 【问题描述】:我有这个猫鼬模式:
var listingSchema = new Schema(
street : String,
buildingNumber : Number,
apartmentNumber : Number,
UsersAndQuestions: [
userID: String,
questionID: [String]
]
);
我只想用UsersAndQuestions
的新条目来更新它,其中包含一个userID
,它是一个String
,和一个questionID
,它也是一个String
(但需要插入到数组中)。
我正在使用这个PUT
请求:
app.put('/api/listing/:street/:buildingNumber/:apartmentNumber/addUserInput/:userid/:listingid/:questionid')
所以我手头有所有必要的参数。
通常,当我想更新架构中的字段时,我会使用我编写的以下代码:
app.put('/api/listing/:street/:buildingNumber/:apartmentNumber/addReportedUser/:userid/:listingid', function (req, res)
var listingToUpdate = req.params.listingid;
var idToAdd = req.params.userid;
Listing.update(_id: ObjectId(listingToUpdate),
$addToSet: reportedUsersIDs: ObjectId(idToAdd)
, function (err)
if (err)
res.send("There was a problem adding the reportedUserID to the listing" + err);
else
console.log("Success adding reportedUserID to listing!");
)
);
您可以看到我使用了$addToSet
,并且效果很好。但现在我想将 两个 参数添加到一个数组字段。我想过做这样的事情:
app.put('/api/listing/:street/:buildingNumber/:apartmentNumber/addUserInput/:userid/:listingid/:questionid', function(req,res)
var listingToUpdate = req.params.listingid;
var idToAdd = req.params.userid;
var questionToAdd = req.params.questionid;
Listing.update(_id: ObjectId(listingToUpdate),
$addToSet: UsersAndQuestions.userID : ObjectId(idToAdd), UsersAndQuestions.questionID : ObjectId(questionToAdd)
, function (err)
if (err)
res.send("There was a problem adding the user and question to the listing" + err);
else
console.log("Success adding user and question to the listing!");
)
);
但我显然得到了SyntaxError
。
执行我尝试执行的操作的正确语法是什么?
非常感谢! :)
【问题讨论】:
【参考方案1】:你需要添加对象来设置UsersAndQuestions:
$addToSet: UsersAndQuestions: userID: idToAdd, questionID: questionToAdd
更新。
我会用两个查询来做:
Listing.update(_id: ObjectId(listingToUpdate), 'UsersAndQuestions.userID': idToAdd,
"$addToSet": "UsersAndQuestions.$.questionID": questionToAdd
, function (err, result)
if(result.n === 0)
//we haven't found document with the userId - idToAdd
//we need to insert to UsersAndQuestions document with this user
Listing.update(_id: ObjectId(listingToUpdate),
$addToSet: UsersAndQuestions: userID: idToAdd, questionID: questionToAdd ,
function(err, res)
)
)
【讨论】:
非常感谢!你知道我需要改变什么,所以如果用户 ID 存在,它只会将 questionToAdd 添加到该用户问题数组中?以上是关于具有多个值的 Mongo $addToSet 语法正确的主要内容,如果未能解决你的问题,请参考以下文章
你可以在 Mongo 中为 $addToSet 指定一个键吗?
是否有简单的语法用于在 perl 中声明具有一个值的多个键?