NodeJS无法在MongoDB中添加ToSet

NodeJS unable to addToSet in MongoDB

本文关键字:添加 ToSet MongoDB NodeJS      更新时间:2023-09-26

我想更新JSON中的一个字段,它是一个带有元素(simple,嗯?)的数组
我想将userid添加到reportedUsersIDs数组中
我正在运行的查询(通过POSTMAN):
http://localhost:3000/api/listing/myStreet/1/1/addReportedUser/564b343fbc2d4310156c6bf9/5671a8f694745bfce5bf6ecf

我检查了数据库中是否存在两个ID,并且列表本身也存在(在street=myStreet,buildingNumber=1,apartmentNumber=1)
routes.js中的代码为:

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, listing) {
            if (err) {
                res.send("There was a problem adding the reportedUserID to the listing" + err);
            }
            else {
                console.log("Success adding reportedUserID to listing!");
                res.json(listing);
            }
        })
});

它返回成功,但JSON保持不变。

相关数据:

我试图更改的列表模式:

var listingSchema = new Schema({
        street          : String,
        buildingNumber  : Number,
        apartmentNumber : Number,
        reportedUsersIDs: [String]
});

我的用户模式:

var userSchema = new Schema({
    local            : {
        email        : String,
        password     : String
    },
    name             : String
});

为什么我的JSON没有更新?

由于reportedUsersIDs在您的模式中被声明为String的数组,因此您也应该将它们添加为字符串,而不是ObjectId:

{ $addToSet : { reportedUsersIDs : idToAdd } }

或者,您可以更改模式,使其成为ObjectId:的数组

reportedUsersIDs : [ Schema.Types.ObjectId ]