鉴于我的文档中有一个哈希子文档,我如何匹配一个值 -
categoryId
(本身使用 $addFields
添加) - 到子文档键 - categoryTypes
- 在我的聚合管道中:
例如:
{
_id: $someId,
categoryId: 2,
categoryTypes: {
1: "hello world",
2: "something else",
3: "still more stuff"
}
}
我需要匹配
categoryId
(2)以键入categoryTypes
(2)。本质上我需要说:
$match: { categoryId: categoryTypes }
谢谢!
一个选择是使用
$objectToArray
:
db.collection.aggregate([
{$set: {allKeys: {$objectToArray: "$categoryTypes"}}},
{$match: {$expr: {$in: [{$toString: "$categoryId"}, "$allKeys.k"]}}},
{$unset: "allKeys"}
])
事实证明这比我原先想的要简单:
1-首先将散列更改为一个数组,生成一个看起来像
ARRAY: [ "0": {...}, "1": {...}, ...]
的子文档
// this is happening in $addFields stage
categories: { "$objectToArray": "$categoryTypes"}
2-然后在我的
project
阶段我做了:
category: {
$filter: {
input: '$categories',
as: 'item',
cond: {$eq: ['$$item.k', "$categoryId"]}
}}
希望这可以帮助其他可能正在寻找类似解决方案的人。