我有一个包含 100 个文档/行的 MongoDB 集合书籍。我使用 POSTMAN 发出带有 2 个参数“类型:科幻”和“语言:英语”的 POST 请求。我想从我的集合 books
中得到一个简单的 json 响应,其中的文档只包含这个值(在 SQL 中我会做这样的事情:SELECT * FROM books WHERE genre="sci fi"AND language= "english",但我在 nodejs/express/mongodb 中需要这个。)
Nodejs、Express 和 MongoDB 运行正常,我已经创建了一个包含文档的集合:
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 并获得正确的响应(与我的搜索相匹配的文档),而不是我的整个 100 行集合。我看了十几个关于 mongodb 和 express 的教程,但我无法理解。一个工作示例真的很棒。
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);
}
关于node.js - 如何将多个POST参数传递给mongodb并获得匹配结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44573388/