我有一个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是一个字符串。
感谢您的任何建议。 的Mattias
答案 0 :(得分:2)
find实际上会返回一个游标,即使只有一个记录匹配,你需要通过游标迭代,试试这个:
myModel.find({$or: [{_id: my_id}, {external_id: my_id}]}).nextObject(function (err, model) {
...
}
答案 1 :(得分:0)
您可以使用toArray()函数将在游标中获得的结果转换为数组,并在代码中更轻松地使用它。
myModel.findOne({$or: [{_id: my_id}, {external_id: my_id}]}).toArray(function (err, model) {
...
});