Подсчет из монго того же запроса с лимитом 1 (Node.js) - PullRequest
0 голосов
/ 08 ноября 2018

Мой запрос:

 event.find({
    id:{$get:id},
    num:"5"
}).limit(1)

, но я также делаю тот же запрос и получаю результат подсчета (из того же запроса), поэтому 1 результат является последним с пределом 1, а второй - счетчиком безlimit

как мне это сделать в MongoDB?

один вариант, о котором я думал, это выполнить тот же запрос, но без ограничения, например, получить 2000 результатов и подсчитать в коде node.js.

код моего узла:

result = await this.collection.find({
    'val':obj.val,
    'id' : {$lt: id}
}).sort({id:-1}).limit(1).project({_id:0})  

let count  = await result.count()

но счетчик всегда возвращает 1 (потому что счетчик должен игнорировать опцию id) это возможно?

пример:

запрос это имя = yy и id = 3

1-  { id :3 , name:yy  },
2 - {id : 2 , name:yy}

другим примером

будет результат: строка 2 (3 больше 2).с количеством = 2

  1-  { id :3 , name:yy  },
    2 - {id : 2 , name:xx}

результат будет: [] с числом = 1.(тот же запрос без идентификатора

1 Ответ

0 голосов
/ 08 ноября 2018

Вы можете попробовать агрегацию ниже, используя $facet

result = await this.collection.aggregate([
  { "$facet": {
    "count": [
      { "$match": { "id": { "$lte": id }}},
      { "$count": "count" }
    ],
    "data": [
      { "$match": { "val": obj.val, "id" : id }},
      { "$sort": { "id": -1 }},
      { "$limit": 1 },
      { "$project": { "_id": 0 }}
    ]
  }}
]) 

result = result[0].data
const count  = result[0].count
...