Как агрегировать документы с `$ in` в mongodb? - PullRequest
0 голосов
/ 24 декабря 2018

Мои документы:

> db.messages.find({})

 {   "_id" : ObjectId("5c1f9e3d37e9e12650b9971a"), 
"groupId" : ObjectId("5c0fe59f5dcbbe30b732616c"), 
"content" : "hi"
}
{   "_id" : ObjectId("5c1f9e3d37e9e12650b9971a"), 
    "groupId" : ObjectId("5c0fe59f5dcbbe30b732616c"), 
   "content" : "hello"
}
{   "_id" : ObjectId("5c1f9e3d37e9e12650b9971a"), 
"groupId" : ObjectId("5c0fe59f5dcbbe30b732616d"), 
"content" : "hi"
}
 {   "_id" : ObjectId("5c1f9e3d37e9e12650b9971a"), 
  "groupId" : ObjectId("5c0fe59f5dcbbe30b732616e"), 
  "content" : "hi"
}

одна группа имеет много сообщений.теперь у меня есть groupIds как: [ObjectId ("5c0fe59f5dcbbe30b732616c"), ObjectId ("5c0fe59f5dcbbe30b732616d")] *

Я хочу найти последнее одно сообщение, используя $in с sql как:

SELECT * FROM `message` WHERE `groupId` IN (xx,xx) group by 
groupId order by id desc .
1009 * как это сделать с оболочкой монго?

1 Ответ

0 голосов
/ 24 декабря 2018

Сначала необходимо $sort с полем createdAt, чтобы получить последнее сообщение в $groupэтап с использованием $first агрегация

db.collection.aggregate([
  { "$match": { "groupId": { "$in": [ObjectId("5c0fe59f5dcbbe30b732616c"), ObjectId("5c0fe59f5dcbbe30b732616d")] }}},
  { "$sort": { "createdAt": -1 }},
  { "$group": {
    "_id": "$groupId",
    "content": { "$first": "$content" }
  }}
])
...