省略在更新期间集合中具有null的元素

时间:2019-07-12 09:47:08

标签: node.js mongodb mongoose

我试图通过传递ObjectId作为请求正文值来更新模型中的值。有时它正在更新,有时不更新。我发现这是因为在某些记录中ObjectId为空。当集合中没有null时,可以进行更新。因此,我决定省略记录中具有null值的记录,并查询其余记录。但是我面临一个问题。我无法从省略的空记录中查询我手动存储的集合。

代码

accept = async (req, res) => {
    let ObjectId = require('mongoose').Types.ObjectId
    try {
        await this._model.find({
            person1: {
                $ne: null
            }
        }, (err, obj) => {
            if (err) {
                console.log(err);
            } else {
                console.log(obj);
                obj.update({
                    person1: new ObjectId(req.body.cid),
                    person2: new ObjectId(req.body.uid)
                }, {
                    $set: {
                        status: "active"
                    },
                }, (err, doc) => {

                    if (err) {
                        this.getErrorMsg(res, 522, null);

                    } else {
                        this.getErrorMsg(res, 227, doc);
                    }
                })

            }

        })
    } catch (err) {

        console.log(err);
    }
}

收藏

[{
   "_id":"5d2715cea9ae086ac295c6d8",
   "status":"pending",
   "person1":ObjectId("5cfe4dd898fd225ef1c99ded"),
   "person2":ObjectId("5d02197e2859122fa28c189b")
}
{
   "_id":"5d2715cea9ae086ac295c6d9",
   "status":"pending",
   "person1":ObjectId("5cfe4dd898fd225ef1c99dee"),
   "person2":ObjectId("5d02197e2859122fa28c189c")
}
{
   "_id":"5d2715cea9ae086ac295c6d0",
   "status":"pending",
   "person1":null,
   "person2":ObjectId("5d02197e2859122fa28c189f")
}]

错误

  

TypeError:obj.update不是函数

1 个答案:

答案 0 :(得分:0)

您只需要在更新查询的过滤器中添加person1: {$ne: null}

示例:

await this._model.update({
  person1: {$ne: null, $eq: new ObjectId(req.body.cid)},
  person2: new ObjectId(req.body.uid)
}, {
  $set: {
    status: "active"
  }
})