3

假设我有一个包含如下文档的集合:

{
    "_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 的“用户”子文档的文档,该用户 ID 未被删除 - 因此,查询看起来像:

{"users.userId": ObjectId("507f1f77bcf86cd799439011"), "users.deleted": false}

updatedAt是否可以按行中匹配的子文档的属性对返回的结果集进行排序?如果没有,是否有更合适的设置方法?我是否应该创建另一个我当前嵌入users密钥的集合,然后引用父文档?

4

1 回答 1

1

是的,有可能。你可以试试这个:

 db.collection.aggregate([
 {$unwind:"$users"},
 {$match:{"users.userId":"ObjectId("507f1f77bcf86cd799439011")","users.deleted":false}},
 {$sort:{"users.updatedAt":1}}])

此处的“收藏”将替换为您的收藏名称。

于 2013-10-14T08:50:03.527 回答