我们正在寻找一种方法,根据文档内部数组中的值对文档进行排序。特别的是,我们只想按另一个属性具有特定值的值排序。
我们的文档就是这样的:
{
_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作为键,则元素数组中的其他值将被删除,因此
key: address
将被删除,返回的文档将包含一个对象,而不是一个如下所示的数组:
{
_id: '1',
elements: {
key: 'locationName',
value: 'A value'
},
},
{
_id: '2',
elements: {
key: 'locationName',
value: 'Another value'
},
}
所以我们的想法是在聚合中创建一个新字段,其中包含
locationName
. 我们知道
$addFields
操作,但在我们的例子中,mongodb版本太低(我们使用的是3.2),所以我们希望找到一个没有
$添加字段