Mongodb MongDB:从嵌套文档中提取动态键、值对的查询

Mongodb MongDB:从嵌套文档中提取动态键、值对的查询,mongodb,mongoose,mongodb-query,Mongodb,Mongoose,Mongodb Query,下面给出的是我的数据结构,我需要提取“发布者”动态键,并将($lookup)与另一个集合进行比较以匹配记录,求和%值 "_id" : ObjectId("5eff1e9a9bb60729d3278140"), "tracks" : [ { "_id" : ObjectId("5efd9548327f5509b009b5a9"),

下面给出的是我的数据结构,我需要提取“发布者”动态键,并将($lookup)与另一个集合进行比较以匹配记录,求和%值

 "_id" : ObjectId("5eff1e9a9bb60729d3278140"),
    "tracks" : [ 
        {
            "_id" : ObjectId("5efd9548327f5509b009b5a9"),
            "artist" : ["abc"],
            "genre" : "Pop",
            "publishers" : {
                "a" : "30.00%",
                "b" : "30.00%",
                "c" : "30.00%",
                "d" : "10.00%"
            },
            "__v" : 0
        }
  • 数据结构有效吗
  • 我正在尝试将其转换为$ObjectToArray,但无法转换嵌套文档,有什么建议吗

  • 您可以使用此聚合管道。它会将发布者数组中的动态键转换为以下形式的对象,然后您可以轻松地应用
    $lookup
    阶段

      {
        "_id": ObjectId("5eff1e9a9bb60729d3278140"),
        "percentage": 30,
        "publisher": "b"
      }
    


    更新示例

    首先非常感谢您的回复,我能够得到预期的结果。我可以再与您确认一件事吗,请在此处找到我的查询“”,并向我建议,这是推荐的方法吗?在看到上面的数据库结构后,我添加了另一个示例。您可以根据需要修改此查询。感谢您提供的示例,看起来您已经更改了给定的数据结构,它适用于您的数据结构,而不是我的数据结构。请查找实际结构,并希望将结果集作为包含总贡献(每个匹配发布者百分比的总和)和指标标志true/false(true=100%,false 100%)的跟踪详细信息。完整的数据结构:“这完全偏离了实际问题本身,您需要发布另一个问题并解释您想要实现的目标。实际问题已经发布,给定的解决方案与提供的数据结构不同,因此,我试图得到解决方案,使其能够与四个单独的集合而不是单个嵌套集合一起工作,请给出建议。
    db.collection.aggregate([
      {
        $unwind: "$tracks"
      },
      {
        $project: {
          publisher: {
            $objectToArray: "$tracks.publishers"
          }
        }
      },
      {
        $unwind: "$publisher"
      },
      {
        $project: {
          publisher: "$publisher.k",
          percentage: {
            $convert: {
              input: {
                $trim: {
                  input: "$publisher.v",
                  chars: "%"
                }
              },
              to: "double"
            }
          }
        }
      }
    ])