一尘不染

具有$ or条件的猫鼬的find方法无法正常工作

node.js

最近,我开始在Node.js上将MongoDB与Mongoose结合使用。

当我将Model.find方法与$or条件和_id字段一起使用时,猫鼬无法正常工作。

这不起作用:

User.find({
  $or: [
    { '_id': param },
    { 'name': param },
    { 'nickname': param }
  ]
}, function(err, docs) {
   if(!err) res.send(docs);
});

顺便说一句,如果我删除了’_id’部分,这确实可行!

User.find({
  $or: [
    { 'name': param },
    { 'nickname': param }
  ]
}, function(err, docs) {
   if(!err) res.send(docs);
});

在MongoDB Shell中,两者都可以正常工作。


阅读 233

收藏
2020-07-07

共1个答案

一尘不染

我通过谷歌搜索解决了这个问题:

var ObjectId = require('mongoose').Types.ObjectId;
var objId = new ObjectId( (param.length < 12) ? "123456789012" : param );
// You should make string 'param' as ObjectId type. To avoid exception, 
// the 'param' must consist of more than 12 characters.

User.find( { $or:[ {'_id':objId}, {'name':param}, {'nickname':param} ]}, 
  function(err,docs){
    if(!err) res.send(docs);
});
2020-07-07