Python 在嵌套文档mongodb中查找
我的数据如下所示:Python 在嵌套文档mongodb中查找,python,mongodb,aggregate,Python,Mongodb,Aggregate,我的数据如下所示: { "_id" : ObjectId("60772a343d0e1058a8255145"), "first" : ISODate("2010-01-01T18:00:00Z"), "last" : ISODate("2010-01-01T18:55:00Z"), "maxid13" : -9999,
{
"_id" : ObjectId("60772a343d0e1058a8255145"),
"first" : ISODate("2010-01-01T18:00:00Z"),
"last" : ISODate("2010-01-01T18:55:00Z"),
"maxid13" : -9999,
"maxid9" : 7.9,
"minid13" : -9999,
"minid9" : 7.1,
"nsamples" : 12,
"samples" : [
{
"id1" : 3758,
"id6" : 2,
"id7" : -79.09,
"id8" : 35.97,
"id9" : 7.1,
"id10" : 0,
"id11" : -99999,
"id12" : 0,
"id13" : -9999,
"c14" : "U",
"id15" : 0,
"id16" : 62,
"id17" : 0,
"id18" : -99,
"id19" : -9999,
"id20" : 1199,
"id21" : 0,
"id22" : -99,
"id23" : 0,
"timestamp1" : ISODate("2010-01-01T18:00:00Z"),
"timestamp2" : ISODate("2010-01-01T13:00:00Z")
},
{
"id1" : 3758,
"id6" : 2,
"id7" : -79.09,
"id8" : 35.97,
"id9" : 7.2,
"id10" : 0,
"id11" : -99999,
"id12" : 0,
"id13" : -9999,
"c14" : "U",
"id15" : 0,
"id16" : 62,
"id17" : 0,
"id18" : -99,
"id19" : -9999,
"id20" : 1198,
"id21" : 0,
"id22" : -99,
"id23" : 0,
"timestamp1" : ISODate("2010-01-01T18:05:00Z"),
"timestamp2" : ISODate("2010-01-01T13:05:00Z")
},
.
.
.
mydb1.mongodbbucketright.aggregate([
{
"$match": {
"first": {"$gte": datetime.strptime("2010-01-01 00:05:00", "%Y-%m-%d %H:%M:%S"),
"$lte" :datetime.strptime("2010-01-02 00:05:00", "%Y-%m-%d %H:%M:%S")},
"samples.id13": {"$gt": 5}
}
},
{ "$unwind": "$samples" },
{
"$match": {
"first": {"$gte": datetime.strptime("2010-01-01 00:05:00", "%Y-%m-%d %H:%M:%S"),
"$lte": datetime.strptime("2010-01-02 00:05:00", "%Y-%m-%d %H:%M:%S")},
"samples.id13": {"$gt": 5}
}
},
])
我要执行此查询:
mydb1.mongodbbucketright.find(
{"samples.timestamp1": {"$gte": datetime.strptime("2010-01-01 00:05:00", "%Y-%m-%d %H:%M:%S"),
"$lte": datetime.strptime("2010-01-02 00:05:00", "%Y-%m-%d %H:%M:%S")},
"samples.id13":{"$gt":5}},
{"samples.$": 1 })
这是在嵌套文档中查找的正确方法吗?
我想我得到的结果比平常少。
执行时间对我来说很关键,所以如果我能成功使用find,我不想使用aggregate
使用aggregate,我可以执行如下查询:
{
"_id" : ObjectId("60772a343d0e1058a8255145"),
"first" : ISODate("2010-01-01T18:00:00Z"),
"last" : ISODate("2010-01-01T18:55:00Z"),
"maxid13" : -9999,
"maxid9" : 7.9,
"minid13" : -9999,
"minid9" : 7.1,
"nsamples" : 12,
"samples" : [
{
"id1" : 3758,
"id6" : 2,
"id7" : -79.09,
"id8" : 35.97,
"id9" : 7.1,
"id10" : 0,
"id11" : -99999,
"id12" : 0,
"id13" : -9999,
"c14" : "U",
"id15" : 0,
"id16" : 62,
"id17" : 0,
"id18" : -99,
"id19" : -9999,
"id20" : 1199,
"id21" : 0,
"id22" : -99,
"id23" : 0,
"timestamp1" : ISODate("2010-01-01T18:00:00Z"),
"timestamp2" : ISODate("2010-01-01T13:00:00Z")
},
{
"id1" : 3758,
"id6" : 2,
"id7" : -79.09,
"id8" : 35.97,
"id9" : 7.2,
"id10" : 0,
"id11" : -99999,
"id12" : 0,
"id13" : -9999,
"c14" : "U",
"id15" : 0,
"id16" : 62,
"id17" : 0,
"id18" : -99,
"id19" : -9999,
"id20" : 1198,
"id21" : 0,
"id22" : -99,
"id23" : 0,
"timestamp1" : ISODate("2010-01-01T18:05:00Z"),
"timestamp2" : ISODate("2010-01-01T13:05:00Z")
},
.
.
.
mydb1.mongodbbucketright.aggregate([
{
"$match": {
"first": {"$gte": datetime.strptime("2010-01-01 00:05:00", "%Y-%m-%d %H:%M:%S"),
"$lte" :datetime.strptime("2010-01-02 00:05:00", "%Y-%m-%d %H:%M:%S")},
"samples.id13": {"$gt": 5}
}
},
{ "$unwind": "$samples" },
{
"$match": {
"first": {"$gte": datetime.strptime("2010-01-01 00:05:00", "%Y-%m-%d %H:%M:%S"),
"$lte": datetime.strptime("2010-01-02 00:05:00", "%Y-%m-%d %H:%M:%S")},
"samples.id13": {"$gt": 5}
}
},
])
你认为哪条路正确?
提前谢谢