node.js - 如何将多个POST参数传递给mongodb并获得匹配结果

标签 node.js mongodb express mongoose

我有一个包含 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/

相关文章:

node.js - 解析请求正文中的 UTF8 字符时出现问题?

node.js - sinon 否认一个 stub 被调用,即使它被调用了

javascript - 使用 Promises 和 xmlhttpRequests 从 github 获取公共(public)用户数据?

javascript - Mongo的findOneAndReplace如何处理id?

mongodb - 我们可以在 MongoDB 的更新查询中使用 'limit' 吗?

node.js - Express:从另一个中间件调用一个中间件

node.js - 使用变量构建嵌套对象的动态 MongoDB/Mongoose 查询

mongodb - 如何在 Mongo Shell CLI 中使用脚本

javascript - 无法存储线串和多边形 - MEAN + Mongoose

javascript - 将路由参数传递给 ExpressJS 中的 Controller