【问题标题】:MongoDB - select distinct values from a collection where values are separated by commaMongoDB - 从集合中选择不同的值,其中值用逗号分隔
【发布时间】:2021-02-06 11:34:42
【问题描述】:

要从 DB 和名为“names”的集合中获取不同值的列表,就这么简单:

db.name.distinct('names')

但是,我继承了一个 MongoDB,其中 names 包含用逗号分隔的值。 因此,db.name.distinct('names') 会返回包含如下值的 JSON:

names
--------
[
"name1,name2",
"name2,name3",
"name4,name1,name3"
]

我需要从“名称”中获取不同值的列表,所以它看起来像这样:

names
--------
[
"name1",
"name2",
"name3",
"name"
]

我需要以编程方式进行吗?

【问题讨论】:

    标签: mongodb distinct


    【解决方案1】:

    你可以试试,

    • $reduce 命名数组作为输入,$split 带有 , 的值将返回数组,$setUnion 将加入数组并从集合中获取联合/唯一数组,
    db.collection.aggregate([
      {
        $project: {
          names: {
            $reduce: {
              input: "$names",
              initialValue: [],
              in: {
                $setUnion: [{ $split: ["$$this", ","] }, "$$value"]
              }
            }
          }
        }
      }
    ])
    

    Playground


    如果您想要所有记录中的唯一名称,请尝试,

    • $project 跳过,同上查询
    • $unwind 解构名称数组
    • $group 通过 null 并使用 $addToSet 从名称中获取唯一值
      // skipped $project from above query
    
      { $unwind: "$names" },
      {
        $group: {
          _id: null,
          names: { $addToSet: "$names" }
        }
      }
    

    Playground

    【讨论】:

    • 非常感谢您的时间和经验......谢谢,这就像一个魅力,
    • 我能再问你一个问题吗?似乎有些值用一个逗号分隔:“,”,但其他值用逗号和空格分隔:“,”或“,”。知道如何处理吗?
    • 现在我很难对输出进行排序,添加 { $sort: {names: -1}} 似乎不起作用。有什么建议?一个新的例子在这里:mongoplayground.net/p/vrPKKnUpfHY
    猜你喜欢
    • 2021-01-19
    • 2023-03-21
    • 2020-08-02
    • 1970-01-01
    • 2020-01-19
    • 1970-01-01
    • 2020-01-15
    • 2021-06-07
    • 1970-01-01
    相关资源
    最近更新 更多