![](/img/trans.png)
[英]How to sort array of objects based on object property (which is Array) Javascript
[英]How to sort objects inside an array which is stored in an object
我创建了一个名为“对话”的集合,其文档之一如下。
{
"_id" : ObjectId("5535fb3172163e5f1561daa7"),
"messages" : [
{
"from" : ObjectId("5534b2992a104ed914435c31"),
"_id" : ObjectId("5535fb3172163e5f1561daa8"),
"created" : ISODate("2015-04-21T07:24:33.495Z"),
"read" : false,
"message" : "second first message",
"participants" : [
ObjectId("5534b2992a104ed914435c31"),
ObjectId("5530af38576214dd3553331c")
]
},
{
"from" : ObjectId("5534b2992a104ed914435c31"),
"_id" : ObjectId("5535fb6472163e5f1561daa9"),
"created" : ISODate("2015-04-21T07:25:24.349Z"),
"read" : false,
"message" : "second second message",
"participants" : [
ObjectId("5534b2992a104ed914435c31"),
ObjectId("5530af38576214dd3553331c")
]
},
{
"from" : ObjectId("5534b2992a104ed914435c31"),
"_id" : ObjectId("5535fb8272163e5f1561daaa"),
"created" : ISODate("2015-04-21T07:25:54.190Z"),
"read" : false,
"message" : "second third message",
"participants" : [
ObjectId("5534b2992a104ed914435c31"),
ObjectId("5530af38576214dd3553331c")
]
}
],
"participants" : [
ObjectId("5534b2992a104ed914435c31"),
ObjectId("5530af38576214dd3553331c")
],
"__v" : 2
}
现在,我必须根据对象的'created'属性对messages数组内的对象进行排序。 我使用了以下代码。
1. db.conversations.aggregate({$sort: {'messages.message' : -1}}).pretty()
2. db.conversations.find({_id :ObjectId('5536023d33e52be617b8bb27')}).sort({"messages.created":1}).pretty()
但是这些都不给我正确的结果。 请帮助我获得想要的结果。 谢谢
您可以使用Mongodb Aggregation框架
db.conversations.aggregate([{
'$match':{
'_id' :ObjectId("5536023d33e52be617b8bb27")}
},
{'$unwind': '$messages'},
{'$sort': { 'messages.created' : -1 }}
])
结果:-
{
result:[
{
'_id' :ObjectId("5536023d33e52be617b8bb27"),
'messages' :{
"from" : ObjectId("5534b2992a104ed914435c31"),
"_id" : ObjectId("5535fb8272163e5f1561daaa"),
"created" : ISODate("2015-04-21T07:25:54.190Z"),
"read" : false,
"message" : "second third message",
"participants" : [
ObjectId("5534b2992a104ed914435c31"),
ObjectId("5530af38576214dd3553331c")
]
},
"participants" : [
ObjectId("5534b2992a104ed914435c31"),
ObjectId("5530af38576214dd3553331c")
],
"__v" : 2
}
{
'_id' :ObjectId("5536023d33e52be617b8bb27"),
'messages' :{
"from" : ObjectId("5534b2992a104ed914435c31"),
"_id" : ObjectId("5535fb6472163e5f1561daa9"),
"created" : ISODate("2015-04-21T07:25:24.349Z"),
"read" : false,
"message" : "second second message",
"participants" : [
ObjectId("5534b2992a104ed914435c31"),
ObjectId("5530af38576214dd3553331c")
]
},
"participants" : [
ObjectId("5534b2992a104ed914435c31"),
ObjectId("5530af38576214dd3553331c")
],
"__v" : 2
},
{
'_id' :ObjectId("5536023d33e52be617b8bb27"),
'messages' :{
"from" : ObjectId("5534b2992a104ed914435c31"),
"_id" : ObjectId("5535fb3172163e5f1561daa8"),
"created" : ISODate("2015-04-21T07:24:33.495Z"),
"read" : false,
"message" : "second first message",
"participants" : [
ObjectId("5534b2992a104ed914435c31"),
ObjectId("5530af38576214dd3553331c")
]
},
"participants" : [
ObjectId("5534b2992a104ed914435c31"),
ObjectId("5530af38576214dd3553331c")
],
"__v" : 2
},
]
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.