Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何将几个POST参数传递给mongodb并获得匹配结果_Node.js_Mongodb_Express_Mongoose - Fatal编程技术网

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

Node.js 如何将几个POST参数传递给mongodb并获得匹配结果,node.js,mongodb,express,mongoose,Node.js,Mongodb,Express,Mongoose,我有一个MongoDB收藏书籍,包含100个文档/行。我使用POSTMAN发出一个带有两个参数“流派:科幻”和“语言:英语”的帖子请求。我想从我的收藏书籍中得到一个简单的json响应,文档中只包含这个值(在SQL中,我会这样做:从grore=“sci fi”和language=“english”的书籍中选择*,但我需要nodejs/express/mongodb。) Nodejs、Express和MongoDB运行正常,我已经创建了一个包含文档的集合: api.js var express =

我有一个MongoDB收藏书籍,包含100个文档/行。我使用POSTMAN发出一个带有两个参数“流派:科幻”和“语言:英语”的帖子请求。我想从我的收藏
书籍
中得到一个简单的json响应,文档中只包含这个值(在SQL中,我会这样做:从grore=“sci fi”和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);
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);
    }
我还可以使用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 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);
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);
}

您是否创建了mongoose数据模型/模式?查询将取决于您的Mongoo数据模型。所以,在你分享之前,没有人能回答它。我发布了更多的代码,但这不起作用,你可以完全更改它。你缺少了查询。你是说收集文档吗?我加了一个。如果不是,我不知道你的意思,对不起:(