tsc*_*ela 3 sorting mongodb mongovue
我试图按嵌入文档的日期对某些文档进行排序.我的文件看起来像:
[
{
name: 'item1',
slots: [
{
date : ISODate("2013-01-18T23:00:00Z")
},
{
date : ISODate("2013-02-05T23:00:00Z")
},
{
date : ISODate("2013-03-24T23:00:00Z")
},
]
},
{
name: 'item2',
slots: [
{
date : ISODate("2013-01-12T23:00:00Z")
},
{
date : ISODate("2013-01-03T23:00:00Z")
},
{
date : ISODate("2013-03-04T23:00:00Z")
},
]
},
{
name: 'item3',
slots: [
{
date : ISODate("2013-03-14T23:00:00Z")
},
{
date : ISODate("2013-02-18T23:00:00Z")
},
{
date : ISODate("2013-03-07T23:00:00Z")
},
]
}
]
Run Code Online (Sandbox Code Playgroud)
我需要slot.date升序排序的结果.所以结果应该是这样的:
[
{
name: 'item2',
slots: [
{
date : ISODate("2013-01-03T23:00:00Z")
},
{
date : ISODate("2013-01-12T23:00:00Z")
},
{
date : ISODate("2013-03-04T23:00:00Z")
},
]
},
{
name: 'item1',
slots: [
{
date : ISODate("2013-01-18T23:00:00Z")
},
{
date : ISODate("2013-02-05T23:00:00Z")
},
{
date : ISODate("2013-03-24T23:00:00Z")
},
]
},
{
name: 'item3',
slots: [
{
date : ISODate("2013-02-18T23:00:00Z")
},
{
date : ISODate("2013-03-07T23:00:00Z")
},
{
date : ISODate("2013-03-14T23:00:00Z")
}
]
}
]
Run Code Online (Sandbox Code Playgroud)
第一项2,因为它包含最早的slot.date(ISODate("2013-01-03T23:00:00Z")).第二项1因为它包含第二个最早的日期(ISODate("2013-01-18T23:00:00Z"))等等....它还可以对嵌入文档中的日期进行排序?
我尝试过的:
.sort({{slots.date : 1}})
Run Code Online (Sandbox Code Playgroud)
但我得到一个语法错误.我使用MongoVUE来测试查询,MongoVUE可能无法在嵌入式文档上运行排序吗?它甚至可能我想做什么?
你展示的代码:
.sort({{slots.date : 1}})
Run Code Online (Sandbox Code Playgroud)
有语法错误.您的代码中有两个括号,它应该是:
.sort({slots.date : 1})
Run Code Online (Sandbox Code Playgroud)
还有几种方法可以对内部子文档进行排序.也许客户端是这里最快的方法,但是,如果它证明在MongoDB本身内本地执行它更快,你也可以使用聚合框架:
db.col.aggregate([
{$unwind: '$slots'},
{$sort: {slots.date:1}},
{$group: {_id: '$_id', slots: {$push: '$slots'}}
])
Run Code Online (Sandbox Code Playgroud)
这样的东西将分类子文档.