Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对数组内嵌套对象的mongodb distinct操作_Javascript_Mongodb - Fatal编程技术网

Javascript 对数组内嵌套对象的mongodb distinct操作

Javascript 对数组内嵌套对象的mongodb distinct操作,javascript,mongodb,Javascript,Mongodb,我的mongodb数据库如下所示 [{ "_id": ObjectId("5e049ebc8e935c407f78c190"), "2020-04-25": [ { "browser": "Chrome", "ts": "2020-04-25 21:05" }, { "browser": "Firefox", "ts": "2020-04-25 21:05" }

我的mongodb数据库如下所示

[{
    "_id": ObjectId("5e049ebc8e935c407f78c190"),
    "2020-04-25": [
      {
        "browser": "Chrome",
        "ts": "2020-04-25 21:05"
      },
      {
        "browser": "Firefox",
        "ts": "2020-04-25 21:05"
      }
    ]
  },
  {
    "_id": ObjectId("5e049ebc8e935c407f68c190"),
    "2020-04-26": [
      {
        "browser": "Chrome",
        "ts": "2020-04-26 10:45"
      },
      {
        "browser": "Edge",
        "ts": "2020-04-26 10:45"
      },
      {
        "browser": "Firefox",
        "ts": "2020-04-26 10:46"
      }
    ]
  }]

我想查找键浏览器的所有不同值

我尝试过使用distinct,但我一直在想如何在db中的所有日期都使用它


我尝试了$all运算符,但发现它只能用于值,不能用于键。

对于当前的数据结构,无法避免在所有数据上使用,然后进行分组。这将使这条管道非常低效

db.collection.aggregate([
    {
        "$addFields": {
            "newField": {
                "$objectToArray": "$$ROOT"
            }
        }
    },
    {
        "$unwind": "$newField"
    },
    {
        "$unwind": "$newField.v"
    },
    {
        "$group": {
            "_id": "$newField.v.browser"
        }
    },
    {
        "$match": {
            // this null is due to the _id field, you could also filter "newField" before unwinding instead.
            "_id": {"$ne": null}
        }
    }
]);
我建议你考虑重新构造你的数据,比如:

{
    "_id": ObjectId("5e049ebc8e935c407f68c190"),
    date: "2020-04-26",
    data: [
        {
            "browser": "Chrome",
            "ts": "2020-04-26 10:45"
        },
        {
            "browser": "Edge",
            "ts": "2020-04-26 10:45"
        },
        {
            "browser": "Firefox",
            "ts": "2020-04-26 10:46"
        }
    ]
}
现在,您可以轻松地实现相同的结果(以及许多其他结果),如下所示:

db.collection.distinct("data.browser")