【问题标题】:MongoDB sort query?MongoDB排序查询?
【发布时间】:2014-04-26 11:47:28
【问题描述】:
db.data.insert({userAjax: 'sean',date:'26/04/2014',latv:'78.134123', lonv:'43.
342123', distance:'1.23', hours:'0', minutes:'4', seconds:'21', speed: '1.04' })

db.data.insert({userAjax: 'sean',date:'26/04/2014',latv:'78.134123', lonv:'43.
342123', distance:'1.23', hours:'0', minutes:'4', seconds:'21', speed: '1.04' })

db.data.insert({userAjax: 'sean',date:'25/04/2014',latv:'78.134123', lonv:'43.
342123', distance:'0.43', hours:'0', minutes:'2', seconds:'47', speed: '1.33' })

db.data.insert({userAjax: 'sean',date:'25/04/2014',latv:'78.134123', lonv:'43.
342123', distance:'0.43', hours:'0', minutes:'7', seconds:'55', speed: '1.33' })

这是我收藏的示例结构。在网站上我需要显示日期,但只显示该日期的最新插入,

数据通过 ajax 从手机(地理位置)传来,在客户端必须显示插入的最新日期。

【问题讨论】:

  • 首先请更正您的文档结构并将日期保存为日期对象而不是字符串。
  • 它是项目中的一个日期对象,我使用的是phonegap地理位置时间戳值,上面的这个值只是为了显示我的收藏是什么样子

标签: node.js mongodb geolocation


【解决方案1】:

你大概是按日期为给定用户排序的:

db.data.find({ "userAjax": "sean" }).sort({ "date": -1 }).limit(1)

只为您提供该用户在最近日期的一个结果。

另一方面,如果您正在寻找每天的最后一个结果,那么您可以借助 .aggregate() 函数:

db.data.aggregate([
    { "$match": { "userAjax": "sean" } },
    { "$project": {
        "_id": { 
            "date": {
                "year": { "$year": "$date" },
                "month": { "$month": "$date" },
                "day": { "$dayOfMonth": "$date" }
            }
        },
        "userAjax": "$userAjax",
        "date": "$date",
        "latv": "$latv", 
        "lonv": "$longv", 
        "distance": "$distance", 
        "hours": "$hours",
        "minutes": "$minutes", 
        "seconds": "$seconds", 
        "speed": "$speed" 
    }},
    { "$sort": { "_id": -1 } },
    { "$group": {
        "_id": { "$first": "$_id" },
        "userAjax": { "$first": "$userAjax" },
        "date": { "$first": "$date" },
        "latv": { "$first": "$latv" }, 
        "lonv": { "$first": "$longv" },
        "distance": { "$first": "$distance" },
        "hours": { "$first": "$hours" },
        "minutes": { "$first": "$minutes" }, 
        "seconds": { "$first": "$seconds" }, 
        "speed": { "$first": "$speed" }
    }}
])

这更简洁,但这就是你想要的。

【讨论】:

  • 这只给了我今天的最新结果,假设今天将数据发送到服务器并在网站上显示今天日期的最新插入,然后发送明天的数据再次与明天的日期,我希望网站同时显示日期及其最新插入
  • 你的问题不是很清楚。您实际上每天都在寻找什么“最后”结果?
  • @user1785982 然后有一个表格可以做到这一点。更多的参与,但它确实完成了工作
  • 什么形式?你能解释一下吗?如果重要的话,我正在使用 node.js 和 Jade 模板引擎
  • @user1785982 像这样的响应通常表明您重新阅读已编辑的答案。欢迎来到堆栈溢出。
猜你喜欢
  • 2013-09-02
  • 2013-03-13
  • 1970-01-01
  • 1970-01-01
  • 2019-04-12
  • 2012-11-14
  • 2017-09-08
  • 1970-01-01
  • 2021-03-09
相关资源
最近更新 更多