首页 > 解决方案 > Pymongo 在多个集合上选择值,其中条件和按日期分组

问题描述

我是 mongodb 的新手,我使用 pymongo

有没有办法在特定日期与查询参数匹配的多个集合中选择特定字段,并按日期对记录进行分组?

示范:

我有 2 个收藏 A,B

A:

{
   "_id" : ObjectId("7d663451d1e7242c4b68ekjd"), 
   "date" : "Mon Dec 27 2010 18:51:00 GMT+0000 (UTC)", 
   "value" : 1, 
}
{
   "_id" : ObjectId("qd663451d1e7242c4b68e001"), 
   "date" : "Mon Dec 27 2010 18:52:00 GMT+0000 (UTC)", 
   "value" : 2, 
}
...
...

乙:

{
   "_id" : ObjectId("td663451d1e7242c4b68eiu6"), 
   "date" : "Mon Dec 27 2010 18:51:00 GMT+0000 (UTC)", 
   "prediction_value" : 3, 
}
{
   "_id" : ObjectId("4d663451d1e7242c4b68e004"), 
   "date" : "Mon Dec 27 2010 18:52:00 GMT+0000 (UTC)", 
   "prediction_value" : 4, 
}
...
...

例如:

如果我搜索日期 == Mon Dec 27 2010 18:52:00 GMT+0000 (UTC)

我需要在此日期之前获取 A.value 和 B.prediction_value 和组记录

结果如下:

"Mon Dec 27 2010 18:52:00 GMT+0000": [ 
 { 
   "A" : 2
 },
 {
   "B" : 4
 }
]

我会非常感谢一些例子,因为我是一个新手。谢谢你的理解。

标签: pythonmongodbpymongo

解决方案


您可以分别进行两个简单的查询:

date = 'Mon Dec 27 2010 18:52:00 GMT+0000'
A_doc = db.A.find_one({'date': date})
B_doc = db.B.find_one({'date': date})
A_value = A_doc['value']
B_prediction_value = B_doc['prediction_value']
# manipulate the data as you want

Mongo 不完全支持多集合查询,只有 $lookup 用于左外连接。但我认为在大多数情况下,做两个简单的查询比一个困难的查询更可取。检查此链接以获取更多信息:

在 MongoDB 中搜索多个集合

MongoDB一次查询多个集合

https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/


推荐阅读