Как найти с помощью узла и mongodb?

Ниже данных, хранящихся в моей коллекции

[ { "_id" : ObjectId("53d9feff55d6b4dd1171dd9e"),"name":"John", "rank":1, "year":1998 ,"class":"a" ,"total":"1128" }, { "_id" : ObjectId("feff553d95d6b4dd19e171dd"),"name":"Sherif", "rank":1, "year":1999 ,"class":"b" ,"total":"1163"}, { "_id" : ObjectId("9fef53dd6b4dd1171f55dd9e"),"name":"shravan", "rank":1, "year":2000 ,"class":"b" ,"total":"1113"}, { "_id" : ObjectId("117153d9fef6b4dddd9ef55d"),"name":"aneesh", "rank":1, "year":2001 ,"class":"d" ,"total":"1145"}, { "_id" : ObjectId("dd9e53feff55d6b4dd1171d9"),"name":"abdul", "rank":1, "year":1997 ,"class":"a" ,"total":"1100"}, ] 

Я написал api для поиска и [{ "name":"John", "rank":1, "year":1998 },{ "name":"Sherif", "rank":1, "year":1999 }] это данные, которые я получаю от req.body, здесь я упоминал в качестве запроса

 router.post('/users',function(req,res){ var query =[{ "name":"John", "rank":1, "year":1998 },{ "name":"Sherif", "rank":1, "year":1999 }] User.find(query, function(err, result) { if (err) throw err; console.log(result); res.json(result) }); 

Мое ожидание этого res.json должно вернуть только эти два документа

 [ { "_id" : ObjectId("53d9feff55d6b4dd1171dd9e"),"name":"John", "rank":1, "year":1998 ,"class":"a" ,"total":"1128" }, { "_id" : ObjectId("feff553d95d6b4dd19e171dd"),"name":"Sherif", "rank":1, "year":1999 ,"class":"b" ,"total":"1163"}] 

В mongodb мы можем писать так

 db.users.find({rank:1, name:{$in:["John","Sherif"]}, year:{$in:[1998,1999]}}) 

Я хочу решение в nodejs, выразить, потому что по запросу нам нужно найти помощь

попробуйте с mongoose $or оператором

 var query = { $or : [ { "name":"John", "rank":1, "year":1998 }, { "name":"Sherif", "rank":1, "year":1999 } ] } 

Ваш запрос на поиск должен выглядеть следующим образом:

 db.collection.find({rank:1, name:{$in:["John","Sherif"]}, year:{$in:[1998,1999]}}) 

И результатом будет:

 /* 1 */ { "_id" : ObjectId("53d9feff55d6b4dd1171dd9e"), "name" : "John", "rank" : 1, "year" : 1998, "class" : "a", "total" : "1128" } /* 2 */ { "_id" : ObjectId("feff553d95d6b4dd19e171dd"), "name" : "Sherif", "rank" : 1, "year" : 1999, "class" : "b", "total" : "1163" } 

Хотя несколько человек ответили, но я считаю, что полный способ сделать это:

 router.post('/users',function(req, res, next) { // req.body = [{ "name":"John", "rank":1, "year":1998 },{ "name":"Sherif", "rank":1, "year":1999 }] // mapping users to each array const query = { $or: req.body }; // execute query User.find(query, function(err, result) { if (err) next(err); console.log(result); res.json(result); }); });