2015-12-17 19 views
0

我有这样的猫鼬模式:

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存在那么它将追加questionIDuserIDquestionID阵列。如何做呢?

例子:

我迄今是,如果我的JSON是什么样子的:

{ 
    "_id": "567300e694745bfce5bf6ed2", 
    "street": "Rines", 
    "buildingNumber": 1, 
    "apartmentNumber": 1, 
    "UsersAndQuestions": [ 
    { 
     "userID": "564b343fbc2d4310156c6bf9", 
     "questionID": [ 
     "5661db59b0b1b91c1d63643d" 
     ] 
    } 
    ] 
} 

我进行PUT与同userID,同样listingID,但不同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" 
     ] 
    } 
    ] 
} 

是什么做什么,我希望做正确的语法?

非常感谢! :)

+0

回答[这里](http://stackoverflow.com/questions/34340798 /蒙戈-addtoset与 - 多值纠正语法/ 34341272#34341272) –

回答

0

为了完整起见,我会在这里添加答案。

您需要添加对象设置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){ 

      }) 
    } 
})