Javascript 如何查找文档
下面是app.js中的mongoose代码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.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你听到我的问题的答案了吗