【问题标题】:MongoDB - Get arrays with distinctMongoDB - 获取具有不同的数组
【发布时间】:2022-01-03 03:33:03
【问题描述】:

我正在尝试在我的数据中获取“坐标”类型的所有值(数组),如下所示:

[
["51.50064317423898","-0.09372711181640626"],
["51.48465408363687","-0.13149261474609378"]
]

我试过 db.collections("mydb").distinct("coordinate") 但我得到了:

[
  '-0.09372711181640626',
  '-0.13149261474609378',
  '51.48465408363687',
  '51.50064317423898'
]

有没有人知道我怎样才能拥有我想要的所有数组而不是在一个数组中排序? “mydb”看起来像这样:

{
"name":"dfbfdbf",
"coordinate":["51.50064317423898","-0.09372711181640626"],
"rating":"8",
"description":"geojzglijsen"
},
{
"name":"qzfgs",
"coordinate":["51.48465408363687","-0.13149261474609378"],
"rating":"5",
"description":"femkndsmnk"
}

谢谢!

【问题讨论】:

    标签: javascript json mongodb


    【解决方案1】:

    如果您需要从您的收藏中获取不同的坐标:

    mongos> db.a.find()
    { "_id" : ObjectId("619ea12e032deead586f3f91"), "name" : "dfbfdbf", "coordinate" : [ "51.50064317423898", "-0.09372711181640626" ] }
    { "_id" : ObjectId("619ea138032deead586f3f92"), "name" : "a", "coordinate" : [ "51.50064317423898", "-0.09372711181640626" ] }
    { "_id" : ObjectId("619ea14c032deead586f3f93"), "name" : "a", "coordinate" : [ "51.50064317423898", "-0.19372711181640626" ] }
    { "_id" : ObjectId("619ea157032deead586f3f94"), "name" : "a", "coordinate" : [ "51.50064317423898", "-0.09372711181640626" ] }
    { "_id" : ObjectId("619ea15b032deead586f3f95"), "name" : "a", "coordinate" : [ "52.50064317423898", "-0.09372711181640626" ] }
    { "_id" : ObjectId("619ea160032deead586f3f96"), "name" : "a", "coordinate" : [ "52.50064317423898", "-0.09372711181640626" ] }
    mongos> db.a.aggregate([ 
     { $addFields:{coordinates:{$reduce:{ input: {$slice:["$coordinate",1,{$size:"$coordinate"} ]},initialValue:{$arrayElemAt:["$coordinate",0]},in:{$concat:["$$value",";","$$this" ]}    }} }}    ,
     { $group:{_id:"$coordinates" , cnt:{$sum:1}}} ,
     { $project : { coordinate : { $split: ["$_id", ";"] } ,_id:0}}          
     ])
    { "coordinate" : [ "51.50064317423898", "-0.19372711181640626" ] }
    { "coordinate" : [ "51.50064317423898", "-0.09372711181640626" ] }
    { "coordinate" : [ "52.50064317423898", "-0.09372711181640626" ] }
    mongos> 
    

    示例: here

    解释: 从集合中删除重复的坐标

    1. 创建新的字段坐标,将坐标连接到单个字符串中
    2. 对坐标进行分组以删除重复项
    3. 将坐标拆分为原始值。

    此解决方案也没有 16MB 的不同坐标数组摘要大小的限制...

    【讨论】:

      【解决方案2】:

      如果我理解正确,你可以试试这个聚合查询:

      重点是$group by null 获取所有值并使用$addToSet 防止重复值。

      db.collection.aggregate([
        {
          "$group": {
            "_id": null,
            "coordinate": {
              "$addToSet": "$coordinate"
            }
          }
        },
        {
          "$project": {
            "_id": 0
          }
        }
      ])
      

      示例here 我复制了一个对象以查看重复值如何不显示。

      【讨论】:

        猜你喜欢
        • 2021-12-27
        • 1970-01-01
        • 2020-02-11
        • 2020-06-29
        • 2015-10-16
        • 2018-10-25
        • 1970-01-01
        • 1970-01-01
        • 2021-04-23
        相关资源
        最近更新 更多