我有一个收集测试,该测试具有以下值,我必须根据“值”字段从该值中获取文档,我可以从以下给定查询中轻松获取该值。
db.getCollection('test').find({"value" : 100})
但是真正的问题是我有[值]字段列表,例如[100,104,200152,....]此列表可能真的很长,我希望我的结果采用以下给定格式,以减少mongo查询的次数,因为这花费了太多时间,如果包含“值”的列表太大,则我必须执行多个mongo查询才能提取所有记录。
{100:[
/* 1 */
{
"_id" : "C1",
"value" : 100,
"lastUpdatedTime" : ISODate("2019-11-04T00:00:00.000Z"),
"timetaken" : 3.0
}
/* 2 */
{
"_id" : "C2",
"value" : 100,
"lastUpdatedTime" : ISODate("2019-11-04T00:00:00.000Z"),
"timetaken" : 3.0
}
/* 3 */
{
"_id" : "C3",
"value" : 100,
"lastUpdatedTime" : ISODate("2019-11-04T00:00:00.000Z"),
"timetaken" : 3.0
}
/* 4 */
{
"_id" : "C4",
"value" : 100,
"lastUpdatedTime" : ISODate("2019-11-04T00:00:00.000Z"),
"timetaken" : 3.0
}
/* 5 */
{
"_id" : "CO",
"value" : 100,
"lastUpdatedTime" : ISODate("2019-11-04T00:00:00.000Z"),
"timetaken" : 3.0
}
/* 6 */
{
"_id" : "DD",
"value" : 100,
"lastUpdatedTime" : ISODate("2019-11-04T00:00:00.000Z"),
"timetaken" : 3.0
}
/* 7 */
{
"_id" : "EX",
"value" : 100,
"lastUpdatedTime" : ISODate("2019-11-04T00:00:00.000Z"),
"timetaken" : 3.0
}],
104:
[{
"_id" : "AU",
"value" : 104,
"lastUpdatedTime" : ISODate("2019-11-04T00:00:00.000Z"),
"timetaken" : 3.0
}],
200152:
[
{
"_id" : "GenFile",
"value" : 200152,
"lastUpdatedTime" : ISODate("2019-11-04T00:00:00.000Z"),
"timetaken" : 3.0
}
]
DB
/* 1 */ { "_id" : "AU", "value" : 104, "lastUpdatedTime" : ISODate("2019-11-04T00:00:00.000Z"), "timetaken" : 3.0 } /* 2 */ { "_id" : "C1", "value" : 100, "lastUpdatedTime" : ISODate("2019-11-04T00:00:00.000Z"), "timetaken" : 3.0 } /* 3 */ { "_id" : "C2", "value" : 100, "lastUpdatedTime" : ISODate("2019-11-04T00:00:00.000Z"), "timetaken" : 3.0 } /* 4 */ { "_id" : "C3", "value" : 100, "lastUpdatedTime" : ISODate("2019-11-04T00:00:00.000Z"), "timetaken" : 3.0 } /* 5 */ { "_id" : "C4", "value" : 100, "lastUpdatedTime" : ISODate("2019-11-04T00:00:00.000Z"), "timetaken" : 3.0 } /* 6 */ { "_id" : "CO", "value" : 100, "lastUpdatedTime" : ISODate("2019-11-04T00:00:00.000Z"), "timetaken" : 3.0 } /* 7 */ { "_id" : "DD", "value" : 100, "lastUpdatedTime" : ISODate("2019-11-04T00:00:00.000Z"), "timetaken" : 3.0 } /* 8 */ { "_id" : "EX", "value" : 100, "lastUpdatedTime" : ISODate("2019-11-04T00:00:00.000Z"), "timetaken" : 3.0 } /* 9 */ { "_id" : "GS_SEG", "value" : 124755350, "lastUpdatedTime" : ISODate("2019-11-04T00:00:00.000Z"), "timetaken" : 3.0 } /* 10 */ { "_id" : "GenFile", "value" : 200152, "lastUpdatedTime" : ISODate("2019-11-04T00:00:00.000Z"), "timetaken" : 3.0 }
使用$ in运算符进行查询:
# Set or build a list of the values
list_with_values = [100,104,200152]
# Make one call to the DB, asking for all of the matching records.
result = db.getCollection('test').find({"value" : {"$in": list_with_values})
有关$ in运算符如何工作的其他参考:http://docs.mongodb.org/manual/reference/operator/query/in/