【发布时间】:2021-04-25 16:26:51
【问题描述】:
我有一个包含如下文档的集合:
{
_id : 1,
code: 1,
state: "FINISHED",
history: //Object
{ 'CREATED': { date: xxx , anotherParam: xxx },
'FINISHED': { date: xxx , anotherParam: xxx }
}
},
{
_id : 2,
code: 1,
state: "CREATED",
history: //Object
{ 'CREATED': { date: xxx , anotherParam: xxx }
},
{
_id : 3,
code: 2,
state: "FINISHED",
history: //Object
{ 'CREATED': { date: xxx , anotherParam: xxx },
'FINISHED': { date: xxx , anotherParam: xxx }
}
}
我想要做的是一个查找查询,在该查询中我按嵌套在历史中的日期对文档进行排序,其键是每个文档的状态值。
在前面的示例中,我将按状态的当前值排序(在相应的历史键中 => "history.VALUE_OF_STATE.date"。
挑战在于能够根据状态值在该路径内完成。
E.G:查询code == 1的所有文档并按history.VALUE_OF_EACH_DOCUMENT_STATE.date排序
这应该返回 doc _id 1 和 doc _id 2,按日期排序,将 doc 1 的日期视为 history.FINISHED.date,将 doc 2 的日期视为 history.CREATED.date
【问题讨论】:
-
假设您从第一个文档中获取状态,但在下一个文档中状态可能不同...,那么您需要对哪个值进行排序?
-
我已更新问题以解决问题
-
这将是一个非常奇怪的查询,为什么不创建一个名为
sortingDate的字段并在写入时填写呢? -
这将是一个有效的解决方法,我想知道我的要求是否可以完成
-
如果您从子文档移到子文档数组,可能会有这种情况。运行起来仍然很麻烦且昂贵(取决于您的收藏大小)
标签: mongodb mongodb-query spring-data-mongodb