假设我有一个包含以下文档的集合:
{
"_id": ObjectId("507f191e810c19729de860ea"),
"users": [{
"userId": ObjectId("507f1f77bcf86cd799439011"),
"deleted": false,
"updatedAt" ISODate("2013-10-17T20:46:22Z")
}, {
"userId": ObjectId("507f1f71baf40ea8438490fa"),
"deleted": false,
"updatedAt" ISODate("2013-10-17T22:19:10Z")
}]
}
现在,假设我正在查询包含特定userId的“users”子文档的文档,该文档未被删除 - 因此,查询类似于:
{"users.userId": ObjectId("507f1f77bcf86cd799439011"), "users.deleted": false}
是否可以通过行中匹配的子文档的updatedAt
属性对返回的结果集进行排序?如果没有,是否有更合适的方法来设置它?我是否应该创建另一个我目前嵌入users
密钥的集合,然后将该文档引用到父文档中?
答案 0 :(得分:1)
是的,这是可能的。你可以试试这个:
db.collection.aggregate([
{$unwind:"$users"},
{$match:{"users.userId":"ObjectId("507f1f77bcf86cd799439011")","users.deleted":false}},
{$sort:{"users.updatedAt":1}}])
此处'collection'将替换为您的集合名称。