【问题标题】:Can't get $or query to work in NodeJS with Mongoose无法使用 Mongoose 在 NodeJS 中使用 $ 或查询
【发布时间】:2018-12-13 18:11:44
【问题描述】:

我有一个 NodeJS 应用程序,它带有一个函数,该函数接受一个 id 并从我的 MongoDB 数据库中返回一个与所述 id 对应的对象。 id 可以与模型中的 _id (ObjectID) 或 external_id (string) 匹配,为什么我要过滤掉 id 等于 _id 或等于 external_id 的对象。我编写了这段代码,但是当我在 NodeJS 中运行它时它似乎不起作用,但是如果我在终端的 mongo 中尝试它,它就可以正常工作:

myModel.findOne({$or: [{_id: my_id}, {external_id: my_id}]}, function (err, model) {
    ...
});

由于它在终端中工作,我猜这两个模型对象的不同类型可能存在问题,但我无法弄清楚。 my_id 是一个字符串。

感谢您的任何建议。 马蒂亚斯

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    find 实际上会返回一个游标,即使只有一条记录匹配,您也需要遍历游标,试试这个:

    myModel.find({$or: [{_id: my_id}, {external_id: my_id}]}).nextObject(function (err, model) {
        ...
    }
    

    【讨论】:

      【解决方案2】:

      您可以使用 toArray() 函数将光标中获得的结果转换为数组,并在您的代码中更轻松地使用它。

      myModel.findOne({$or: [{_id: my_id}, {external_id: my_id}]}).toArray(function (err, model) { ... });

      【讨论】:

        猜你喜欢
        • 2012-12-09
        • 2017-12-23
        • 2020-05-16
        • 1970-01-01
        • 2016-11-12
        • 2020-01-04
        • 1970-01-01
        • 2019-08-10
        • 2012-02-23
        相关资源
        最近更新 更多