匹配聚合管道中的子文档键

问题描述 投票:0回答:2

鉴于我的文档中有一个哈希子文档,我如何匹配一个值 -

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 }

谢谢!

mongodb aggregation-framework
2个回答
0
投票

一个选择是使用

$objectToArray

db.collection.aggregate([
  {$set: {allKeys: {$objectToArray: "$categoryTypes"}}},
  {$match: {$expr: {$in: [{$toString: "$categoryId"}, "$allKeys.k"]}}},
  {$unset: "allKeys"}
])

游乐场示例中查看它是如何工作的


0
投票

事实证明这比我原先想的要简单:

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"]}
    }}

希望这可以帮助其他可能正在寻找类似解决方案的人。

© www.soinside.com 2019 - 2024. All rights reserved.