我们正在寻找一种通过文档内部数组中的值对文档进行排序的方法。特殊的是,我们只想按另一个属性具有特定值的值进行排序。
这是我们文档的样子:
{
_id: '1',
elements: [
{
key: 'locationName',
value: 'A value'
},
{
key: 'address',
value: 'Somewhere over the rainbow'
},
],
},
{
_id: '2',
elements: [
{
key: 'address',
value: 'Far far away'
},
{
key: 'locationName',
value: 'Another value'
},
],
},
{
_id: '3',
elements: [],
}
在这种情况下,我们要按elements.$.key === 'locationName'
中的位置名称值对文档进行排序。
在使用$unwind
和$match
之后,我们可以对文档进行排序-但是通过展开数组并按key === 'locationName'
进行匹配,示例中的最后一个文档将被“删除”因为此文档的匹配失败。但是,当然,我们还希望列出没有给定locationName的文档。另一个问题是,当我们使用$unwind
时,如果没有locationName作为键,则元素数组中的其他值将被删除-因此key: address
将被删除,并且返回的文档将具有一个对象而不是看起来像这样的数组:
{
_id: '1',
elements: {
key: 'locationName',
value: 'A value'
},
},
{
_id: '2',
elements: {
key: 'locationName',
value: 'Another value'
},
}
因此,我们的想法是在包含locationName
的聚合中创建一个新字段。我们知道有$addFields
操作,但是在我们的例子中,我们的mongodb版本太低(我们使用的是3.2),因此我们想找到一个没有$addFields
的解决方案。
我们不确定这是否是我们想做的事情,或者对于我们当前的mongoDB版本是否不可能。也许你们中的一个有一个解决办法的想法?