【发布时间】:2016-03-24 08:45:08
【问题描述】:
我有这个猫鼬模式:
var listingSchema = new Schema({
street : String,
buildingNumber : Number,
apartmentNumber : Number,
UsersAndQuestions: [{
userID: { type: String, unique: true},
questionID: [String],
_id : false
}],
});
我只想用UsersAndQuestions 的新条目来更新它,其中包含一个userID,它是一个String,和一个questionID,它也是一个String(但需要插入到数组中)。
我正在使用这个PUT 请求:
app.put('/api/listing/:street/:buildingNumber/:apartmentNumber/addUserInput/:userid/:listingid/:questionid')
所以我手头有所有必要的参数。
通常,当我想更新架构中的字段时,我会使用我编写的以下代码:
app.put('/api/listing/:street/:buildingNumber/:apartmentNumber/addUserInput/:userid/:listingid/:questionid', function (req, res) {
console.log("adding user and question he answered to listing schema");
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), questionID: ObjectId(questionToAdd)}}}
, function (err, listing) {
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!");
res.send("Success!");
}
})
});
这可以防止完全重复相同的 UsersAndQuestions 条目。
我的问题是:我希望如果userID 存在,那么它将追加 questionID 到userID questionID 数组。怎么办?
例子:
到目前为止,如果我的 JSON 看起来像这样:
{
"_id": "567300e694745bfce5bf6ed2",
"street": "Rines",
"buildingNumber": 1,
"apartmentNumber": 1,
"UsersAndQuestions": [
{
"userID": "564b343fbc2d4310156c6bf9",
"questionID": [
"5661db59b0b1b91c1d63643d"
]
}
]
}
我使用相同的userID、相同的listingID 执行PUT,但不同 questionID 我得到:
{
"_id": "567300e694745bfce5bf6ed2",
"street": "Rines",
"buildingNumber": 1,
"apartmentNumber": 1,
"UsersAndQuestions": [
{
"userID": "564b343fbc2d4310156c6bf9",
"questionID": [
"5661db59b0b1b91c1d63643d"
]
},
{
"userID": "564b343fbc2d4310156c6bf9",
"questionID": [
"5669d90a058ceddc158e97e2"
]
}
]
}
而我想要得到的是:
{
"_id": "567300e694745bfce5bf6ed2",
"street": "Rines",
"buildingNumber": 1,
"apartmentNumber": 1,
"UsersAndQuestions": [
{
"userID": "564b343fbc2d4310156c6bf9",
"questionID": [
"5661db59b0b1b91c1d63643d", "5669d90a058ceddc158e97e2"
]
}
]
}
做我想做的事的正确语法是什么?
非常感谢! :)
【问题讨论】:
-
已回复here
标签: javascript json node.js mongodb mongoose