我的数据如下所示:
{
"_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.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,我不想使用聚合。
使用聚合,我可以像这样执行这个查询:
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}
}
},
])
您认为哪种方式是正确的? 提前致谢!