Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.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集合中具有条件的第一个匹配文档_Javascript_Node.js_Mongodb_Mongoose_Schema - Fatal编程技术网

Javascript 仅获取mongodb集合中具有条件的第一个匹配文档

Javascript 仅获取mongodb集合中具有条件的第一个匹配文档,javascript,node.js,mongodb,mongoose,schema,Javascript,Node.js,Mongodb,Mongoose,Schema,这是我的收藏 [ { _id: "585be0da13385513689f704a", site: "NBT", url: "m.nbt.com", label: "NBT Home", platform: "mobile", speed: 61, date: "2016-12-22T14:18:57.975Z" }, { _id: "585be

这是我的收藏

[
    {
        _id: "585be0da13385513689f704a",
        site: "NBT",
        url: "m.nbt.com",
        label: "NBT Home",
        platform: "mobile",
        speed: 61,
        date: "2016-12-22T14:18:57.975Z"
    },
    {
        _id: "585be0da13385513689f704b",
        site: "NBT",
        url: "nbt.com",
        label: "NBT Home",
        platform: "desktop",
        speed: 75,
        date: "2016-12-22T14:15:57.975Z"
    },
    {
        _id: "585be0da13385513689f704c",
        site: "MT",
        url: "m.mt.com",
        label: "MT Home",
        platform: "mobile",
        speed: 40,
        date: "2016-12-22T14:01:57.975Z"
    },
    {
        _id: "585be0da13385513689f704d",
        site: "NBT",
        url: "m.nbt.com",
        label: "NBT Home",
        platform: "mobile",
        speed: 90,
        date: "2016-12-22T12:18:57.975Z"
    }
]
预期输出:

[
    {
        _id: "585be0da13385513689f704b",
        site: "NBT",
        url: "nbt.com",
        label: "NBT Home",
        platform: "desktop",
        speed: 75,
        date: "2016-12-22T14:15:57.975Z"
    },
    {
        _id: "585be0da13385513689f704c",
        site: "MT",
        url: "m.mt.com",
        label: "MT Home",
        platform: "mobile",
        speed: 40,
        date: "2016-12-22T14:01:57.975Z"
    },
    {
        _id: "585be0da13385513689f704d",
        site: "NBT",
        url: "m.nbt.com",
        label: "NBT Home",
        platform: "mobile",
        speed: 90,
        date: "2016-12-22T12:18:57.975Z"
    }
]
基本上,我希望首先匹配不同的(标签+平台)组合文档

正如您在colloction中看到的,label-NBT Home出现在3个文档中,但我只想检索label+platform的唯一组合。所以NBT Home for mobile和NBT Home for desktop正是我所期待的

请帮助。

试试这个:

db.collection.aggregate([
   {
      $group:{
         _id:{
            label:"$label",
            platform:"$platform"
         },
         site:{
            $first:"$site"
         },
         url:{
            $first:"$url"
         },
         speed:{
            $first:"$speed"
         }
      }
   }
])
输出:

{
    "_id" : {
        "label" : "MT Home",
        "platform" : "mobile"
    },
    "site" : "MT",
    "url" : "m.mt.com",
    "speed" : 40
}
{
    "_id" : {
        "label" : "NBT Home",
        "platform" : "desktop"
    },
    "site" : "NBT",
    "url" : "nbt.com",
    "speed" : 75
}
{
    "_id" : {
        "label" : "NBT Home",
        "platform" : "mobile"
    },
    "site" : "NBT",
    "url" : "m.nbt.com",
    "speed" : 61
}
在聚合管道中使用,然后使用或

下面的查询是使用$first编写的

db.collection.aggregate([{$group:{ "_id":{"label":"$label", "platform":"$platform"}, "site": {"$first":"$site"}, "url": {"$first":"$url"}, "speed":{"$first":"$speed"}, "date":{"$first":"$date"} } }])
对于具有以下记录的样本采集

db.collection.find()


{ "_id" : "585be0da13385513689f704a", "site" : "NBT", "url" : "m.nbt.com", "labe
l" : "NBT Home", "platform" : "mobile", "speed" : 61, "date" : "2016-12-22T14:18
:57.975Z" }
{ "_id" : "585be0da13385513689f704b", "site" : "NBT", "url" : "nbt.com", "label"
 : "NBT Home", "platform" : "desktop", "speed" : 75, "date" : "2016-12-22T14:15:
57.975Z" }
{ "_id" : "585be0da13385513689f704c", "site" : "MT", "url" : "m.mt.com", "label"
 : "MT Home", "platform" : "mobile", "speed" : 40, "date" : "2016-12-22T14:01:57
.975Z" }
{ "_id" : "585be0da13385513689f704d", "site" : "NBT", "url" : "m.nbt.com", "labe
l" : "NBT Home", "platform" : "mobile", "speed" : 90, "date" : "2016-12-22T12:18
:57.975Z" }
上面的查询将给出如下结果:

{
  "_id": {
    "label": "MT Home",
    "platform": "mobile"
  },
  "site": "MT",
  "url": "m.mt.com",
  "speed": 40,
  "date": "2016-12-22T14:01:57.975Z"
}
{
  "_id": {
    "label": "NBT Home",
    "platform": "mobile"
  },
  "site": "NBT",
  "url": "m.nbt.com",
  "speed": 61,
  "date": "2016-12-22T14:18:57.975Z"
}
{
  "_id": {
    "label": "NBT Home",
    "platform": "desktop"
  },
  "site": "NBT",
  "url ": "nbt.com",
  "speed": 75,
  "date": "2016-12-22T14:15:57.975Z"
}

这仅返回2条记录,但预期输出有3.MT Home和NBT Home+mobile返回。缺少NBT Home+桌面。@MohitRathi再看一看我发布的输出,返回了3个文档,NBT Home+桌面也存在。这是对您提供的示例文档进行聚合查询的结果。。。