Как сгруппировать документ с одинаковым именем, имеющим разные значения для определенного атрибута, в один массив с помощью Mongodb? - PullRequest
1 голос
/ 20 апреля 2019

Если у меня есть эти объекты:

{
    "_id" : ObjectId("5caf2c1642e3731464c2c79d"),
    "requested" : [],
    "roomNo" : "E0-1-09",
    "capacity" : 40,
    "venueType" : "LR(M)",
    "seatingType" : "TB",
    "slotStart" : "8:30AM",
    "slotEnd" : "9:50AM",
    "__v" : 0
}

/* 2 */
{
    "_id" : ObjectId("5caf2deb4a7f5222305b55d5"),
    "requested" : [],
    "roomNo" : "E0-1-09",
    "capacity" : 40,
    "venueType" : "LR(M)",
    "seatingType" : "TB",
    "slotStart" : "10:00AM",
    "slotEnd" : "11:20AM",
    "__v" : 0
}

возможно ли получить что-то подобное, используя агрегат в mongodb?

[{ roomNo: "E0-1-09" , availability : [{slotStart : "8:30AM", slotEnd: "9:50AM"} ,
{slotStart: "10:00AM", slotEnd : "11:20AM"}]

что я использую в настоящее время:

db.getDB().collection(collection).aggregate([
  { $group: {_id:{roomNo: "$roomNo", availability :[{slotStart:"$slotStart", slotEnd:"$slotEnd"}]}}}
     ])

фактически получая его дважды, вот так:

[{ roomNo: "E0-1-09" , availability : [{slotStart : "8:30AM", slotEnd: "9:50AM"}]
[{ roomNo: "E0-1-09" , availability : [{slotStart: "10:00AM", slotEnd : "11:20AM"}]

1 Ответ

1 голос
/ 20 апреля 2019

Вы должны использовать $push аккумулятор

db.collection.aggregate([
  { "$group": {
    "_id": "$roomNo",
    "availability": {
      "$push": {
        "slotEnd": "$slotEnd",
        "slotStart": "$slotStart"
      }
    }
  }}
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...