mongodb 查询

mongodb 文章表字段 _id title content date(时间戳)
如何查询文章按年份归档这样的列表(刚接触mongodb)

2017
    2017-01-3 文章标题
    2017-01-3 文章标题
2016    
    2016-01-3 文章标题
    2016-01-3 文章标题
阅读 3.1k
3 个回答

可以使用MongoDB的aggregation来实现,可能会用到其中的$group,$year等operator或者function。

MongoDB的aggregation主要用于实现统计、复杂查询等功能,非常优秀。下面链接是官方文档:

https://docs.mongodb.com/manu...

供参考。

Love MongoDB!Have fun!

我现在正在弄这个,你可以参考下我的,我是这样解决的,这里我是采用的ejs模块,如过你也是采用这个模块引擎的话,这样写是可以的。

<ul class="archive">
    <% var lastDay= 0 %>
    <% posts.forEach(function(post,index){%>
        <%if(lastDay !=post.time.day){%>
        <li><h2><%=post.time.day%></h2></li>
        <%lastDay=post.time.day%>
    <%}%>
        <li>
            <a href="/u/<%=post.name%>"><%=post.name%></a>&nbsp;&nbsp;&nbsp;   发表的
            <a href="/u/<%=post.name%>/<%=post.time.day%>/<%=post.title%>"><%=post.title%></a>
        </li>
    <%})%>
</ul>

导入数据

db.getCollection('devices').insert([
{
    "_id" : ObjectId("593d1df123aa5c000ea57b80"),
    "Last_Modify_Time" : 1,
    "Last_Modify_By" : 1,
    "Creation_Time" : ISODate("2017-06-11T10:39:45.000Z")
},{
    "_id" : ObjectId("593e7091e2bdc3000e4cdca3"),
    "Last_Modify_Time" : 2,
    "Last_Modify_By" : 2,
    "Creation_Time" : ISODate("2017-06-12T10:44:33.000Z")
},{
    "_id" : ObjectId("5949106bd4e170000e544c1a"),
    "Last_Modify_Time" : 3,
    "Last_Modify_By" : 3,
    "Creation_Time" : ISODate("2017-06-20T12:09:15.000Z")
},{
    "_id" : ObjectId("593ced72c4162e000e7e9611"),
    "Last_Modify_Time" : null,
    "Last_Modify_By" : null,
    "Creation_Time" : ISODate("2017-06-11T07:12:50.000Z")
}
])

SQL

db.getCollection('devices').aggregate([
{
  $group: {
      _id:{$dateToString: {format: "%Y-%m-%d ", date:'$Creation_Time' }},
      'total': {$sum: 1},
      'data': {$push: '$$ROOT'}
      }
},{
  $group: {
      _id: {$substr: ['$_id', 0, 4] },
      'data': {$push: '$$ROOT'}
  }
}
])

这样返回的数据是

/* 1 */
{
    "_id" : "2017",
    "data" : [ 
        {
            "_id" : "2017-06-12 ",
            "total" : 1.0,
            "data" : [ 
                {
                    "_id" : ObjectId("593e7091e2bdc3000e4cdca3"),
                    "Last_Modify_Time" : 2,
                    "Last_Modify_By" : 2,
                    "Creation_Time" : ISODate("2017-06-12T10:44:33.000Z")
                }
            ]
        }, 
        {
            "_id" : "2017-06-20 ",
            "total" : 1.0,
            "data" : [ 
                {
                    "_id" : ObjectId("5949106bd4e170000e544c1a"),
                    "Last_Modify_Time" : 3,
                    "Last_Modify_By" : 3,
                    "Creation_Time" : ISODate("2017-06-20T12:09:15.000Z")
                }
            ]
        }, 
        {
            "_id" : "2017-06-11 ",
            "total" : 2.0,
            "data" : [ 
                {
                    "_id" : ObjectId("593ced72c4162e000e7e9611"),
                    "Last_Modify_Time" : null,
                    "Last_Modify_By" : null,
                    "Creation_Time" : ISODate("2017-06-11T07:12:50.000Z")
                }, 
                {
                    "_id" : ObjectId("593d1df123aa5c000ea57b80"),
                    "Last_Modify_Time" : 1,
                    "Last_Modify_By" : 1,
                    "Creation_Time" : ISODate("2017-06-11T10:39:45.000Z")
                }
            ]
        }
    ]
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题