1. ホーム
  2. mongodb

[解決済み] Mongooseの$or条件付きfindメソッドが正しく動作しない

2022-05-25 02:23:19

質問

最近、NodejsでMongoDBとMongooseを使うようになりました。

Model.findメソッドに $or という条件と _id フィールドがある場合、Mongoose は正しく動作しません。

これは動作しません。

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シェルでは、どちらも正常に動作しています。

どのように解決するのですか?

私はググって解決しました。

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);
});