这是我插入的数据。
{"_id" : ObjectId("4f97ebb5429c822f0506d9d8"), "direction" : "out", "status" : "complete", "inputfile" : "data", "messageid" :"mid_1","previousmessageid" : "previd_1"}
{"_id" : ObjectId("4f97ebb5429c822f0506d9d8"), "direction" : "in", "status" : "complete", "inputfile" : "data1", "messageid" :"0","previousmessageid" : "mid_1"}
现在,我必须查询数据库并找到与第一条记录中的消息ID匹配的记录,方向为"in",而上一条消息ID与第二条记录的方向为"out"。我有大量的数据。请向我建议获取记录的最佳方法。提前谢谢。
最简单的方法是进行两个查询:
- 根据要查找该记录的任何条件查询"第一条记录"。
- 获得"第一条记录"后,您可以使用其
messageid
和direction
"out"来查找第二组记录。
下面是一个使用 MongoDB shell 的示例,尽管您可以将其转换为任何语言:
> var firstRecord = db.collection.findOne({direction: "in", /* other criteria */})
> var cursor = db.collection.find({previousmessageid: firstRecord["messageid"], direction: "out"})
假设您有一个索引来为第一个查询提供服务,并且有一个索引来提供{previousmessageid: 1, direction: 1}
,这将非常有效。
编辑:由于您正在处理方向为"in"的多个记录,因此您可以稍微调整此技术以使其工作:
> var inRecords = db.collection.find({direction: "in", /* other critiera */})
> var messageIds = []
> inRecords.forEach(function (record) { messageIds[messageIds.length] = record.messageid })
> var cursor = db.collection.find({direction: "out", previousmessageid: {$in: messageIds}})
> cursor.sort({previousmessageid: 1})
> /* do something with cursor */
然后,您可以处理应用程序中所有消息的完整回复集。