2016-12-23 2 views
-1

Вот моя коллекцияИзвлечение только первый согласованный документ с условием в коллекции MongoDB

[ 
    { 
     _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" 
    } 
] 

В основном я хочу первым соответствием различных (метка + платформа) комбинированные документы ,

Как вы можете видеть на коллоквене, ярлык - NBT Home присутствует в трех документах, но я хотел бы получить только уникальное сочетание ярлыка + платформа. Поэтому NBT Home для мобильных устройств и NBT Home для настольных компьютеров - это то, что я ожидаю.

Пожалуйста, помогите.

ответ

1

попробовать это:

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 
} 
+0

Это возвращает только 2 записи, однако ожидаемый результат имеет 3. –

+0

МТ Главная и возвращается NBT Home + mobile. NBT Home + рабочий стол отсутствует. –

+0

@MohitRathi еще раз посмотрим на вывод, который я опубликовал, 3 документа возвращены и NBT home + desktop присутствует. Это результат запроса агрегирования на предоставленные вами образцы документов ... – felix

-1

Использование $group в агрегации трубопровода, а затем использовать $first или $limit

Ниже запроса записывается с помощью $ первым.

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" 
} 
Смежные вопросы