Javascript 如何查找文档

Javascript 如何查找文档,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,下面是app.js中的mongoose代码 app.get('/view', function (req, res) { if (err) return handleError(err); { )); }); 我有两个不同的主机条目,即主机名:Redhat1,主机名:Redhat2。 如何使用mongoose仅获取两者的最新条目。 在上面的模式中查找条件中应该修改的内容。请帮助最简单的方法:按主机名查找(每个名称一个查询),按时间戳排序desc,并限制为1 // needed t

下面是app.js中的mongoose代码

app.get('/view', function (req, res) {


if (err) return handleError(err);

    {
)); });

我有两个不同的主机条目,即主机名:Redhat1,主机名:Redhat2。 如何使用mongoose仅获取两者的最新条目。
在上面的模式中查找条件中应该修改的内容。请帮助

最简单的方法:按主机名查找(每个名称一个查询),按时间戳排序desc,并限制为1

// needed to tell mongoose to use ES6 Promises
require('mongoose').Promise = global.Promise;

app.get('/view', function (req, res) {
    var query1 = User.find({ "Host.Host_name": "RedHat1" })
        .sort({ Date.Time_stamp: -1 })
        .limit(1)
        .exec(); // exec() without argument returns a promise

    var query2 = User.find({ "Host.Host_name": "RedHat2" })
        .sort({ Date.Time_stamp: -1 })
        .limit(1)
        .exec();

    Promise.all([query1, query2])
        .then(function (docs) {
            var Users = docs.map(function (User){
                return {
                    time: User.Date.Time_stamp,
                    host: User.Host.Host_name
                }
            });
            res.render('index',{Users: Users});
        }).catch(function (err) {
            console.log(err);
        });
});
编辑:执行两个查询会导致另一个问题,在发送响应之前,您必须等待两个查询都完成,因此我更新了我的示例。

试试这一个

User.aggregate(
        { $match: { "Host.Host_name": { $in: ["RedHat1", "RedHat2"] }}}
        { $group: { _id: "$Host.Host_name", Time_stamp:{$last:'$Date.Time_stamp'}}}
       ,function (err,docs) {
        if (err) return handleError(err);
                var Users = docs.map(function (User){
                    return {
                        time: User.Time_stamp,
                        host: User._id
                    }
                });
            res.render('index',{Users: Users});
        });

希望这能解决您的问题

需要更多说明您需要Redhat1和Redhat2的最新条目,对吗?通过
主机名
查找(每个名称一个查询),按时间戳排序
desc
,并限制为1。您可以按照@ShanShan所述进行操作,但还有另一种好方法,即按主机名分组结果按时间戳和限制排序2@AlokDeshwal分组可能会产生意外的结果,排序时,名字的两个最新条目可能位于顶部。更正了一些拼写错误。尝试
console.log(docs)
,我刚刚尝试过,它可以工作
docs
是一个包含两个数组的数组,每个数组包含一个文档。不,这是标准的ES6承诺,它已经存在了一段时间。问题在别处,你用的是什么版本的猫鼬?可能它太旧了,无法返回承诺(似乎需要对exec进行回调)。OUCH,这是一个4年的版本,你应该考虑更新,如果你能。但你是如何得到旧版本?你是如何安装猫鼬的?在项目目录中运行
npm install mongoose
将安装最新版本。请参阅下面我对Alok Deshwal回答的评论,我发布了一个应该可以工作的代码。聚合可以工作,但不需要
$limit
,只需在
$group
之前添加一个
$match
。代码:有一个错误,所以请检查修改的一个,然后重试worked@ShanShan为您创建代码时出错,我的代码为您工作,对吗?@ShanShan您能告诉我作为参数传递回调和.exec有什么区别吗command@ShanShan你听到我的问题的答案了吗