MongoDB получить пользователя, который является новым сегодня - PullRequest
0 голосов
/ 01 мая 2020

Я пытаюсь найти новый список пользователей для дня 1. Я написал запрос, чтобы найти пользователей, прибывших до позавчерашнего дня, и список пользователей, пришедших вчера. Теперь я хочу, чтобы минус эти данные, как я могу сделать это в одной агрегатной функции.

Функция для получения списка до вчерашнего дня

  db.chat_question_logs.aggregate([
    {  
        $match : {"createdDate":{$lte: ISODate("2020-04-29T00:00:00Z")}}
    },
    {
        "$project" :
        {
           _id : 0,
            "userInfo.userId":1
        }
    },
    { 
        "$group": {
        "_id": {userId:"$userInfo.userId"},"count": {$sum : 1}}

    } 
])

аналогично для дня-1, как показано ниже

db.chat_question_logs.aggregate([
    {  
        $match : {"createdDate":{$gte: ISODate("2020-04-30T00:00:00Z"),$lte: ISODate("2020-05-01T00:00:00Z")}}
    },
    {
        "$project" :
        {
           _id : 0,
            "userInfo.userId":1
        }
    },
    { 
        "$group": {
        "_id": {userId:"$userInfo.userId"},"count": {$sum : 1}}

    } 
])

Результат JSON как указано ниже

/* 1 */
{
    "_id" : {
        "userId" : "2350202241750776"
    },
    "count" : 1
},

/* 2 */
{
    "_id" : {
        "userId" : "26291570771793121"
    },
    "count" : 1
},

/* 3 */
{
    "_id" : {
        "userId" : "2742872209107866"
    },
    "count" : 5
},

/* 4 */
{
    "_id" : {
        "userId" : "23502022417507761212"
    },
    "count" : 1
},

/* 5 */
{
    "_id" : {
        "userId" : "2629157077179312"
    },
    "count" : 43
}

Как мне найти разницу.

Ответы [ 2 ]

0 голосов
/ 06 мая 2020

Привет нашел решение, которое ниже Я использовал группу и первое появление идентификатора, а затем отфильтровал запись по дате, которую я хотел. Запрос как показано ниже

db.chat_question_logs.aggregate([
{
    $group:
     {
       _id: "$userInfo.userId",
       firstApprance: { $first: "$createdDate" }
     }   
},
{   
    $match : { "firstApprance": { $gte: new ISODate("2020-05-03"), $lt: new ISODate("2020-05-05") } }   
}
])
0 голосов
/ 01 мая 2020

Звучит так, будто вы хотите, чтобы все пользователи были созданы вчера (28-й в этом примере).

 db.chat_question_logs.aggregate([
{  
    $match : { $and: [ 
        { "createdDate":{$lt: ISODate("2020-04-29T00:00:00Z")} },
        { "createdDate": {$gte: ISODate("2020-04-28T00:00:00Z") }}
    ] }
},
{
    "$project" :
    {
       _id : 0,
        "userInfo.userId":1
    }
},
{ 
    "$group": {
    "_id": {userId:"$userInfo.userId"},"count": {$sum : 1}}

} 

])

Это то, что вы хотите?

...