如何将多个POSTparameter passing给mongodb并获得匹配结果

我有一个100个文档/行的MongoDBcollections书籍 。 我使用POSTMAN做了一个带有2个参数“genre:sci fi”和“language:english”的POST请求。 我想从我的集合books获得一个简单的JSON响应,只包含这个值的文档(在SQL中,我会这样做:SELECT * FROM books WHERE genre =“sci fi”AND language =“english”,但我需要这与nodejs / express / mongodb。)

Nodejs,Express和MongoDB运行正常,我已经创build了一个文档集合:

api.js

 var express = require('express'); var app = express(); var bodyParser = require('body-parser'); var mongoose = require('mongoose'); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: true })); Book = require('./models/books'); mongoose.connect('mongodb://localhost/booksdb'); var db = mongoose.connection; db.on('connected', function() { console.log('MongoDB is running'); }); app.listen(3000); 

另外我可以通过console.log访问我的传递参数:

 app.post('/api/searchbooks', function(req, res){ console.log(req.body.genre); console.log(req.body.language); Book.getBooks(function(err, post){ if (err){ throw err; } res.json(post); }); 

但我不知道如何将它们传递给mongodb,并获得适当的响应(与我的search相匹配的文档),而不是100行的整个集合。 我看了十几个教程,以mongodb和expression,但我无法弄清楚。 一个可行的例子将是非常好的。

books.js

 var mongoose = require('mongoose'); var booksSchema = mongoose.Schema({ genre:{ type: String, required: true }, language:{ type: String, required: true }}, { collection: 'books'} ); var Book = module.exports = mongoose.model('books', booksSchema); module.exports.getBooks = function(callback, limit){ Book.find(callback).limit(limit); } 

一个文件:

 { "_id" : ObjectId("97542a337653a7d6bf9cca88"), "genre" : "sci fi", "language" : "english", "year": "1999", "title" : "Foo" } 

在app.js中进行更改

  Book.getBooks({genre : req.body.genre, language:req.body.language }, 10, function(err, post){ if (err){ throw err; } res.json(post); }); 

在books.js中

 module.exports.getBooks = function(query,limit, callback){ Book.find(query).limit(limit).exec(callback); }