gpt4 book ai didi

java - mongodb使用java驱动程序比较两个不同的字段

转载 作者:行者123 更新时间:2023-12-01 05:21:37 25 4
gpt4 key购买 nike

这是我插入的数据。

{"_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"}

现在我必须查询数据库并找到与第一条记录中的messageid匹配的记录,方向为“in”,以及第二条记录中的previousmessageid与方向“out”匹配。我有大量数据。请建议我一种获取记录的最佳方法。提前致谢。

最佳答案

最简单的事情是进行两个查询:

  1. 根据您想要查找该记录的任何条件查询“第一条记录”。
  2. 获得“第一条记录”后,您可以使用其messageid方向“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 */

然后,您可以处理应用程序中所有消息的全套回复。

关于java - mongodb使用java驱动程序比较两个不同的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10317653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com