MongoDB获取最后一个元素与node.js无法正常工作

时间:2016-02-10 08:29:27

标签: javascript node.js mongodb

你好我的项目我瞄准一个简单的任务。我从我的数据库中检索最新的10个条目。我尝试了几乎所有的可能性在Internet.i甚至尝试从mongo.exe运行命令,但无法得到任何结果。你的帮助。

index.js

var messageprocesses = require("./models/messages"); 

   app.get("/messagesreceived",function(req,res){

        var response = {};

        //returns nothing
        messageprocesses.find({}).sort({"_id":-1}).limit(1,function(err, data){

            if(err) {
                console.log(err);
                response = {"error" : true,"message" : "Error fetching data"};
            } else {
                console.log(data);
                response = {"error" : false,"message" : data};
            }
            res.json(response);
        });

    });

在上面的代码中,我试图像我这样进行查询

//gives me toarray is not a function error
messageprocesses.find({}, {limit: 30}).toArray(function(err, docs){})

//brings 10 input but not the latest 10 inputs
messageproceses.find({}, {}, { _id: -1, limit : 10}

//empty find query is working but i need only 10 result
 messageproceses.find({},function(err,docs){})

messages.js

var mongoose = require("mongoose");
mongoose.connect('mongodb://localhost:27017/mydatabase');

var mongoSchema =   mongoose.Schema;

var messages = {
    "chat_id" : String,
    "message" : String,
    "sender" : String,
    "receivers" : String
}
module.exports = mongoose.model('messages',messages);

如果您需要更多信息我可以提供合作

1 个答案:

答案 0 :(得分:2)

在查询中使用 exec() 方法在回调中返回结果:

var messageprocesses = require("./models/messages"); 
app.get("/messagesreceived",function(req,res){

    var response = {};

    messageprocesses.find({})
                    .sort({"_id":-1})
                    .limit(10)
                    .exec(function(err, data){

                        if(err) {
                            console.log(err);
                            response = {"error" : true,"message" : "Error fetching data"};
                        } else {
                            console.log(data);
                            response = {"error" : false,"message" : data};
                        }
                        res.json(response);
                    });

});

您尝试的其他查询无效,因为您直接使用mongo服务器方法,而Mongoose API方法以不同方式包装它们。例如,使用limit方法

的查询
//gives me toarray is not a function error
messageprocesses.find({}, {limit: 30}).toArray(function(err, docs){})

不起作用,因为在Mongoose中它不接受回调函数作为参数,只接受数值。

另一个查询

//brings 10 input but not the latest 10 inputs
messageproceses.find({}, {}, { _id: -1, limit : 10}
由于您未指定 sort() 选项,

未带来所需结果。

好吧,至于这个

//empty find query is working but i need only 10 result
messageproceses.find({},function(err,docs){})

您还没有在查询中指定 sort() limit() 方法。