Группировка в mongoDB со строительством недвижимости - PullRequest
2 голосов
/ 14 апреля 2020

У меня есть коллекция с именем Accounts, как показано ниже data

/* 1 */
{
    "_id" : ObjectId("5e93fea52f804ab99b54e4a2"),
    "account" : "first",
    "connect" : "Always",
    "desc" : "first account feature first phase",
    "status" : true
}

/* 2 */
{
    "_id" : ObjectId("5e93fea32c804ab99b12e4d1"),
    "account" : "second",
    "connect" : "Sometimes",
    "desc" : "second account feature first phase",
    "status" : true
}

/* 3 */
{
    "_id" : ObjectId("5e93fea52f804ab99b55a7b1"),
    "account" : "first",
    "connect" : "Sometimes",
    "desc" : "first account feature second phase",
    "status" : true
}

Попытка сгруппировать и сконструировать данные таким образом, чтобы запрос возвращал результат, подобный структуре ниже

/* First Row */
    "account" : "first",
    [
    {
        _id:ObjectId("5e93fea52f804ab99b54e4a2") 
        "connect" : "Always",
        "desc" : "first account feature first phase",
        "status" : true
    },
    {
        _id:ObjectId("5e93fea52f804ab99b55a7b1") 
        "connect" : "Sometimes",
        "desc" : "first account feature second phase",
        "status" : true
    },

    ]

/* Second Row */
     "account" : "second",
    [
    {
        _id:ObjectId("5e93fea32c804ab99b12e4d1") 
        "connect" : "Always",
        "desc" : "second account feature first phase",
        "status" : true
    },

    ]

Looking для группировки с Учетная запись и соответствующая учетная запись Ряд должен иметь другие связанные данные этого идентификатора.

Что я пробовал

Я пытался написать ниже запрос

db.accounts.aggregate(
    { 
        $match : {account : {$in: ["first", "second"]}}
    }
    ,
    { 
        $group : { 
             _id : "$account"
        }
    }
);

Но это работает частично правильно, возвращая список учетных записей, таких как первое, второе, но не связанные свойства.

Спасибо

1 Ответ

2 голосов
/ 14 апреля 2020

После $group используйте аккумулятор $push, чтобы получить массив сгруппированных данных

db.accounts.aggregate([
  {
    $match: { account: { $in: ["first", "second"] } },
  },
  {
    $group: {
      _id: "$account",
      data: { $push: "$$ROOT" },
    },
  }
]);
...