Разница между лимитом () и $ limit в Mongodb - PullRequest
0 голосов
/ 29 ноября 2018

внутри моего интерфейса и после аутентификации пользователя у меня работает следующий код: ..

...
.then(authedUser =>
        db
          .collection('comments')
          .find({}, { limit: 1 })
          .asArray()
      )
      .then(doc => console.log('doc:', doc)); // 1 doc returned as array, yes!

Однако следующий код не работает:.

...
.then(authedUser =>
        db
          .collection('comments')
          .find({})
          .limit(1)
          .asArray()
      )
      .then(doc => console.log('doc:', doc)); // error inside Promise, limit is not a function...

Могу я узнать почему?Я знаю, что limit () - это метод курсора, а $ limit - этап агрегирования, так что теперь я немного запутался.

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018
limit()

Когда ключевое слово оканчивается скобками, это означает, что метод вызывается

$limit 

Когда ключевое слово начинается с доллара, это означает, что оператор $ limitоператор

$ limit работает только в агрегации

Теперь по вашему вопросу

.then(authedUser =>
        db
          .collection('comments')
          .find({}, { limit: 1 })
          .asArray()
      )
      .then(doc => console.log('doc:', doc));

здесь вы передаете ограничение как option in 3rd параметр, где 1 обозначен как true

, а во втором коде

.then(authedUser =>
        db
          .collection('comments')
          .find({})
          .limit(1)
          .exec(function(err, result) {
              // Do here as a array
              return new Promise((resolve, reject) => {})
           });              
      )
      .then(doc => console.log('doc:', doc));

метод limit вызывается как cascading style(Chaining Methods)

и оба делают одно и то же ограничение на результаты

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

Это немного сбивает с толку в документах, потому что второй будет работать в функции Stitch, но он не работает при использовании SDK.Первый - это правильный способ сделать это из SDK.В SDK операция чтения не имеет модификаторов, что означает, что вы не можете вызвать .limit() на find().

Вот документы для того, что выделает.Надеюсь это поможет!

...