mongoose寻找function,search不返回所需的结果

我有一个Mongodb中的用户列表,需要根据如下图所示的filter进行search: 只有性别是强制性的,用户可能有或没有其他细节

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

上面是search的mongoose查询和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":"" } 

我的问题是查找function,它应该search性别为'2'和年龄> = 28和年龄= <40(从上面的查询给我空数组,即使一个logging满足它)的所有logging,给出所有的结果满足上述条件,不论其他领域是否为空或不存在。 任何帮助,将不胜感激。

正如build议改变查询,但仍然0logging提取

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

});

其中一条logging试图获取

 { "_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 } } 

你从MongoDB得到正确的值,但不是你期望的值,因为你的查询构build不正确。 另外$exist无效的运算符应该是$exists ,你比较空string像userEntry.weightLowerLimit details.waist = ""因为userEntry.weightLowerLimit为空。 但是,您应该正确构build查询以获得预期的结果。 可以这样试试…

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