Nếu bạn muốn sắp xếp như vậy, có thể bạn muốn lưu trữ dữ liệu của mình theo một cách khác. MongoDB nói chung không tốt với việc thao tác các tài liệu lồng nhau như các trường cấp cao nhất. Trong trường hợp của bạn, tôi khuyên bạn nên tách ptime, pt và uid thành bộ sưu tập của riêng chúng:
tin nhắn
{
"_id":417,
"ptime":ISODate("2013-11-26T11:18:42.961Z"),
"type":"1",
"txt":"test message"
},
người dùng
{
"id":417,
"ptime":ISODate("2013-11-26T11:18:42.961Z"),
"uid":"52872ed59542f",
"pt":ISODate("2013-11-26T11:18:42.961Z")
},
{
"id":417,
"ptime":ISODate("2013-11-26T11:18:42.961Z"),
"uid":"524eb460986e4",
"pt":ISODate("2013-11-26T11:18:42.961Z")
},
{
"id":417,
"ptime":ISODate("2013-11-26T11:18:42.961Z"),
"uid":"524179060781e",
"pt":ISODate("2013-11-27T12:48:35Z")
}
Sau đó, bạn có thể đặt chỉ mục trên tập hợp người dùng cho uid, ptime và pt.
Tuy nhiên, bạn sẽ cần thực hiện hai truy vấn để nhận được các tin nhắn văn bản.