在MongoDB聚合查询中使用以$开头的字段

redent84

我有一个由Spring应用程序使用Spring Data填充的MongoDB数据库。我想执行手动查询以合并两个集合并从该数据中提取一些统计信息。

第一个集合被命名emailCampaign并包含以下信息(简化):

{
    "_id" : ObjectId("5db85687307b0a0d184448db"),
    "name" : "Welcome email",
    "subject" : "¡Welcome {{ user.name }}!",
    "status" : "Sent",
    "_class" : "com.mycompany.EmailCampaign"
}

第二个集合被命名campaignDelivery并包含以下信息(简化):

/* 1 */
{
    "_id" : ObjectId("5db183fb307b0aef3113361f"),
    "campaign" : {
        "$ref" : "emailCampaign",
        "$id" : ObjectId("5db85687307b0a0d184448db")
    },
    "deliveries" : 3,
    "_class" : "com.mycompany.CampaignDelivery"
}

/* 2 */
{
    "_id" : ObjectId("5db85f2c307b0a0d184448e1"),
    "campaign" : {
        "$ref" : "emailCampaign",
        "$id" : ObjectId("5db85687307b0a0d184448db")
    },
    "deliveries" : 5,
    "_class" : "com.mycompany.CampaignDelivery"
}

最终,我想获得两个deliveries字段的总和,但是到目前为止,我仍然坚持使用基本的JOIN:

db.emailCampaign.aggregate([
{
    $lookup: {
        from: 'campaignDelivery',
        localField: '_id',
        foreignField: 'campaign.$id',
        as: 'deliveries'
    }
}
])

引发以下错误:

FieldPath字段名称不能以“ $”开头。

逃离美元没有任何影响,而且我无法列举任何以美元开头的字段。

亚历克斯·布莱克斯

您可以通过在子查询中将不相关的$ lookup$ objectToArray结合使用来解决此问题campaign.$id

db.emailCampaign.aggregate([
  { $lookup: {
    from: "campaignDelivery",
    let: { id: "$_id" },
    pipeline: [
      { $addFields: {
        refId: { $arrayElemAt: [
          { $filter: {
            input: { $objectToArray: "$campaign" },
            cond: { $eq: [ "$$this.k", { $literal: "$id" } ] }
          } }
          , 0
        ] }
      } },
      { $match: {
        $expr: { $eq: [
          "$refId.v",
          "$$id"
        ] }
      } },
      { $project: {
        refId: 0
      } }
    ],
    as: "deliveries"
  } }
])

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在MongoDB中使用聚合来选择文档的两个或多个字段

来自分类Dev

在PHP变量中使用以0开头的数字

来自分类Dev

在Elasticsearch查询中使用聚合函数

来自分类Dev

MongoDB:尽管仅使用索引字段,但不涵盖聚合查询

来自分类Dev

如何在单个mongodb查询中使用求和,乘法,除法和分组聚合

来自分类Dev

案例中使用聚合函数的SQL查询

来自分类Dev

在MongoDB中使用聚合框架按特定的嵌套字段值对文档进行计数

来自分类Dev

MongoDB聚合查询与MySQL SELECT字段1 FROM表

来自分类Dev

使用关联集合字段进行查找和排序的MongoDB聚合正在减慢查询速度

来自分类Dev

使用Node JS在MongoDb中聚合查询

来自分类Dev

MongoDB聚合:在$ match $或查询中使用当前文档的字段值

来自分类Dev

使用group-by的Mongodb聚合查询

来自分类Dev

在Mongodb中使用聚合,查找和管道进行查询

来自分类Dev

在MongoDB聚合框架中使用多个字段按相关性排序

来自分类Dev

聚合查询上的Mongodb填充字段

来自分类Dev

MongoDB如何使用聚合代替以下查询

来自分类Dev

如何在Typescript中使用以数字开头的别名

来自分类Dev

MongoDB:将字段从聚合输出添加到查询

来自分类Dev

MongoDB:尽管仅使用索引字段,但不涵盖聚合查询

来自分类Dev

在带有$ or的MongoDB聚合查询中使用数组

来自分类Dev

为MongoDB聚合查询中的每个文档提取大量字段

来自分类Dev

在Meteorjs服务器端函数中使用MongoDB聚合查询

来自分类Dev

案例中使用聚合函数的SQL查询

来自分类Dev

使用聚合函数的MongoDB嵌套查询

来自分类Dev

mongodb聚合查询字段值长度的总和

来自分类Dev

在弹性搜索中使用过滤器查询嵌套字段上的聚合

来自分类Dev

MongoDB 聚合查询 - 组聚合字段错误

来自分类Dev

mongo db 使用以数值开头的字段

来自分类Dev

使用 spring 的 MongoDB 聚合查询

Related 相关文章

  1. 1

    在MongoDB中使用聚合来选择文档的两个或多个字段

  2. 2

    在PHP变量中使用以0开头的数字

  3. 3

    在Elasticsearch查询中使用聚合函数

  4. 4

    MongoDB:尽管仅使用索引字段,但不涵盖聚合查询

  5. 5

    如何在单个mongodb查询中使用求和,乘法,除法和分组聚合

  6. 6

    案例中使用聚合函数的SQL查询

  7. 7

    在MongoDB中使用聚合框架按特定的嵌套字段值对文档进行计数

  8. 8

    MongoDB聚合查询与MySQL SELECT字段1 FROM表

  9. 9

    使用关联集合字段进行查找和排序的MongoDB聚合正在减慢查询速度

  10. 10

    使用Node JS在MongoDb中聚合查询

  11. 11

    MongoDB聚合:在$ match $或查询中使用当前文档的字段值

  12. 12

    使用group-by的Mongodb聚合查询

  13. 13

    在Mongodb中使用聚合,查找和管道进行查询

  14. 14

    在MongoDB聚合框架中使用多个字段按相关性排序

  15. 15

    聚合查询上的Mongodb填充字段

  16. 16

    MongoDB如何使用聚合代替以下查询

  17. 17

    如何在Typescript中使用以数字开头的别名

  18. 18

    MongoDB:将字段从聚合输出添加到查询

  19. 19

    MongoDB:尽管仅使用索引字段,但不涵盖聚合查询

  20. 20

    在带有$ or的MongoDB聚合查询中使用数组

  21. 21

    为MongoDB聚合查询中的每个文档提取大量字段

  22. 22

    在Meteorjs服务器端函数中使用MongoDB聚合查询

  23. 23

    案例中使用聚合函数的SQL查询

  24. 24

    使用聚合函数的MongoDB嵌套查询

  25. 25

    mongodb聚合查询字段值长度的总和

  26. 26

    在弹性搜索中使用过滤器查询嵌套字段上的聚合

  27. 27

    MongoDB 聚合查询 - 组聚合字段错误

  28. 28

    mongo db 使用以数值开头的字段

  29. 29

    使用 spring 的 MongoDB 聚合查询

热门标签

归档