使用一个查询查找多个文档
Finding multiple documents with one query
我有这样的架构:
schema
{
owner: <id to other document type>
created: date
}
我有一组所有者的 ID:[owner_id_1、owner_id_2、...owner_id_x]
我想获取包含这些所有者的文档列表,但仅限于每个文档的最新版本。单独进行查询:
find_one({ owner: owner_id_1 }).sort({ created: -1 }).limit(1)
但我不想触发其中的 x 个,如果可能的话,我想要一种在一个查询中完成的方法
.aggregate()
method allows you do do this, along with matching the documents via the $in
运算符:
collection.aggregate([
{ "$match": { "owner": { "$in": [owner_id_1, owner_id_2, ... owner_id_x] } },
{ "$group": {
"_id": "$owner",
"created": { "$max": "$created" }
}}
])
获取您使用 $in
请求的每个 "owner" 的最大 ( $max
) "created" 值,它采用一个值数组来匹配中的字段条件。
如果您想要的数据不只是那一个字段,请使用 $sort
before you $group
:
collection.aggregate([
{ "$match": { "owner": { "$in": [owner_id_1, owner_id_2, ... owner_id_x] } },
{ "$sort": { "owner": 1, "created": -1 } },
{ "$group": {
"_id": "$owner",
"created": { "$first": "$created" },
"docId": { "$first": "$_id" },
"something": { "$first": "$something" }
}}
])
并且 $first
从每个分组边界取第一个值(降序在排序中完成)。
我有这样的架构:
schema
{
owner: <id to other document type>
created: date
}
我有一组所有者的 ID:[owner_id_1、owner_id_2、...owner_id_x]
我想获取包含这些所有者的文档列表,但仅限于每个文档的最新版本。单独进行查询:
find_one({ owner: owner_id_1 }).sort({ created: -1 }).limit(1)
但我不想触发其中的 x 个,如果可能的话,我想要一种在一个查询中完成的方法
.aggregate()
method allows you do do this, along with matching the documents via the $in
运算符:
collection.aggregate([
{ "$match": { "owner": { "$in": [owner_id_1, owner_id_2, ... owner_id_x] } },
{ "$group": {
"_id": "$owner",
"created": { "$max": "$created" }
}}
])
获取您使用 $in
请求的每个 "owner" 的最大 ( $max
) "created" 值,它采用一个值数组来匹配中的字段条件。
如果您想要的数据不只是那一个字段,请使用 $sort
before you $group
:
collection.aggregate([
{ "$match": { "owner": { "$in": [owner_id_1, owner_id_2, ... owner_id_x] } },
{ "$sort": { "owner": 1, "created": -1 } },
{ "$group": {
"_id": "$owner",
"created": { "$first": "$created" },
"docId": { "$first": "$_id" },
"something": { "$first": "$something" }
}}
])
并且 $first
从每个分组边界取第一个值(降序在排序中完成)。