Mongoose's find method with $or condition does not work properly

前端 未结 4 1294
你的背包
你的背包 2020-12-02 06:29

Recently I start using MongoDB with Mongoose on Nodejs.

When I use Model.find method with $or condition and _id field, Mongoose does not w

相关标签:
4条回答
  • 2020-12-02 06:47
    async() => {
    let body = await model.find().or([
      { name: 'something'},
      { nickname: 'somethang'}
    ]).exec();
    console.log(body);
    }
    /* Gives an array of the searched query!
    returns [] if not found */
    
    0 讨论(0)
  • 2020-12-02 06:51

    According to mongoDB documentation: "...That is, for MongoDB to use indexes to evaluate an $or expression, all the clauses in the $or expression must be supported by indexes."

    So add indexes for your other fields and it will work. I had a similar problem and this solved it.

    You can read more here: https://docs.mongodb.com/manual/reference/operator/query/or/

    0 讨论(0)
  • 2020-12-02 06:57

    I solved it through googling:

    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);
    });
    
    0 讨论(0)
  • 2020-12-02 06:58

    I implore everyone to use Mongoose's query builder language and promises instead of callbacks:

    User.find().or([{ name: param }, { nickname: param }])
        .then(users => { /*logic here*/ })
        .catch(error => { /*error logic here*/ })
    

    Read more about Mongoose Queries.

    0 讨论(0)
提交回复
热议问题