2

我有一个 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 是一个字符串。

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

4

2 回答 2

2

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

myModel.find({$or: [{_id: my_id}, {external_id: my_id}]}).nextObject(function (err, model) {
    ...
}
于 2013-08-28T05:32:47.070 回答
0

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

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

于 2018-12-13T10:11:44.150 回答