【发布时间】:2017-02-08 12:14:02
【问题描述】:
我正在尝试找到一种方法来对 mongo 文档中的对象(又是一个对象)的值进行查询、排序和过滤。文档结构是,
{
_id: '',
uid: '12345',
objects:{
dkey1: {
prop1: val1,
prop2: val2,
...
},
dkey2: {
prop1: val1,
prop2: val2,
...
},
dkey3: {
prop1: val1,
prop2: val2,
...
},
dkey4: {
prop1: val1,
prop2: val2,
...
}
...
}
}
objects 属性可以包含 1000 个具有动态键的对象。它们是基于哈希的唯一键。当我得到这些对象时,我不想全部归还。我想查询、排序、限制,因为如果它们来自不同的文档,就可以做到。例如,如果我说prop1 = val1 按prop2 限制10 排序,则查询应返回objects 中的前10 个子对象,其中它们的prop1 是val1,按prop2 排序。
我认为普通的find 无法做到这一点。所以,我正在尝试使用聚合框架。在第一阶段,我将在uid 上进行匹配。下一个?我在那里很困惑。如果它是一个对象数组,而不是具有动态键的对象,我可以做$unwind,在进一步的阶段,我可以对内部属性进行过滤(prop1,prop2...),排序和应用限制等。但问题是,它不是对象数组。如果有办法将 objects 对象的值转换为对象数组,那会更容易。我一直在寻找方法,但找不到解决方案。
我知道结构不好,更改架构会对我有所帮助。但我现在处于一种情况,我无法改变它。有没有办法将objects 的值转换为对象数组?或者是否有不同的方法可以通过其他一些聚合管道阶段实现相同的结果?
【问题讨论】:
标签: mongodb aggregation-framework