【问题标题】:Mongoose find function to search not returning desired results猫鼬查找功能搜索不返回所需的结果
【发布时间】:2017-10-22 23:34:05
【问题描述】:

我在Mongodb中有一个用户列表,需要根据一些过滤器进行搜索,如下图所示:Only gender is mandatory and users may or may not have other details

    User.find({
     "gender": userEntry.gender,
     "dob": { $gte: convert.getDobFromAge(userEntry.ageHigherLimit), $lte: convert.getDobFromAge(userEntry.ageLowerLimit), $exist: false },
     "details.chest": { $gte: userEntry.chestLowerLimit, $lte: userEntry.chestHigherLimit, $exist: false },
     "details.waist": { $gte: userEntry.waistLowerLimit, $lte: userEntry.waistHigherLimit, $exist: false },
     "details.height": { $gte: userEntry.heightLowerLimit, $lte: userEntry.heightHigherLimit, $exist: false },
     "details.weight": { $gte: userEntry.weightLowerLimit, $lte: userEntry.weightHigherLimit, $exist: false }
   },   function (err, users) {
          return res.render('client/search.html', { users: users });
   });

上面是要搜索的猫鼬查询,userEntry 看起来像这样

 userEntry={
  "gender":2,
  "ageLowerLimit":28,"ageHigherLimit":40,
  "chestLowerLimit":"","chestHigherLimit":"",
  "heightLowerLimit":"","heightHigherLimit":"",
  "waistLowerLimit":"","waistHigherLimit":"",
  "weightLowerLimit":"","weightHigherLimit":"",
  "state":"","city":"",
  "country":"","skin_color":"",
  "profession_type":"","experience":"",
  "hair_type":""
}

我的问题是查找功能,它应该搜索所有性别为 '2' 和 age>=28 和 age=

按照正确的建议将查询更改为但仍提取了 0 条记录

var query = {
  details: {}
};
if (userEntry.gender) {
  query.gender = userEntry.gender;
}
if(userEntry.ageLowerLimit && userEntry.ageHigherLimit ) {
  query.dbo = { $gte: convert.getDobFromAge(userEntry.ageHigherLimit), $lte: convert.getDobFromAge(userEntry.ageLowerLimit)};
}
console.log(query);
User.find(query, function (err, users) {
  if(!err) {
    console.log(users);
    return res.render('client/search.html', { users: users });
  }
  console.log(err);
});

});

试图获取的记录之一

{ "_id" : ObjectId("59c3f47e6388613b94556b78"), "name" : "tanzeel", "email" : "im_tanzeel@yahoo.co.in", "password" : "$2a$10$kvachEZL0vEPPJiS7bIAMeGMXiZ.MRaZmrBECXB207jme1I4JEn6i", "created_at" : ISODate("2017-09-21T17:18:54.822Z"), "role" : 1, "following" : [ ], "dp" : "/dp/default.jpg", "gender" : 2, "__v" : 0, "dob" : ISODate("1994-11-29T00:00:00Z"), "details" : {  "height" : 160, "weight" : 65, "profession_type" : "Actor", "skin_color" : "Tan", "eye_color" : "Black", "waist" : 32, "chest" : 35 } }

【问题讨论】:

    标签: javascript node.js mongodb mongoose


    【解决方案1】:

    您从 MongoDB 获得了正确的值,但不是您的预期值,因为您的查询构建不正确。此外,$exist 无效运算符应该是 $exists 并且您将与 details.waist = "" 等某些字段的空字符串进行比较,因为 userEntry.weightLowerLimit 是空的。但是,您应该正确构建查询以获得预期结果。 可以这样试试……

    var query = {
      details: {}
    };
    
    if (userEntry.gender) {
      query.gender = userEntry.gender;
    }
    if(userEntry.ageLowerLimit && userEntry.ageHigherLimit ) {
      query.dbo = { $gte: convert.getDobFromAge(userEntry.ageHigherLimit), $lte: convert.getDobFromAge(userEntry.ageLowerLimit)};
    }
    if(userEntry.chestLowerLimit &&  userEntry.chestHigherLimit) {
      query['details.chest'] = { $gte: userEntry.chestLowerLimit, $lte: userEntry.chestHigherLimit };
    }
    //... for others conditions
    
    User.find(query, function (err, users) {
      if(!err) {
        return res.render('client/search.html', { users: users });
      }
      console.log(err);
    });
    

    【讨论】:

    • 我尝试了上面的答案,但是现在即使性别 =2 得到 0 条记录(编辑问题)
    • 将 query.details.waist 更改为 query['details.waist'] ,使其正常工作,谢谢
    猜你喜欢
    • 2020-12-16
    • 2016-03-27
    • 2020-03-16
    • 1970-01-01
    • 2014-05-30
    • 2017-12-03
    • 2016-01-12
    • 2015-08-26
    相关资源
    最近更新 更多