【问题标题】:Mongo $addToSet with multiple values correct syntax具有多个值的 Mongo $addToSet 语法正确
【发布时间】: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

执行我尝试执行的操作的正确语法是什么?

非常感谢! :)

【问题讨论】:

    标签: javascript json node.js mongodb mongoose


    【解决方案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 添加到该用户问题数组中?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-13
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    • 2019-06-04
    相关资源
    最近更新 更多