mongodb найти путем сравнения значений полей - PullRequest
11 голосов
/ 19 июня 2011

Можно ли выразить следующий запрос SQL в mongodb:

SELECT * FROM table AS t WHERE t.field1 > t.filed2;

редактирование: Подведем итог:.

  1. использование третьего поля для хранения "field1 - field2" почти идеально, но требует небольшого дополнительного обслуживания.
  2. $ где будет загружаться и вычисляться в JavaScript и не будет использовать никаких индексов. Не подходит для больших данных.
  3. Карта / уменьшение имеет ту же проблему и будет проходить через все записи, даже если нам нужен только один

Ответы [ 3 ]

17 голосов
/ 19 июня 2011

Вы можете сделать это, используя $, где :

db.coll.find( { $where: "this.field1 > this.field2" } );

Но:

Javascript выполняется медленнее, чем нативныйоператоры, но они очень гибкие

15 голосов
/ 19 июня 2011

Вы можете сохранить в своем документе field1 - field2 как field3, затем выполнить поиск { field3: { $gt: 0 } }

Также возможно получить соответствующие документы с mapreduce.

3 голосов
/ 05 февраля 2016

Вы можете использовать $ где. Просто имейте в виду, что это будет довольно медленно (должен выполнять код Javascript для каждой записи), поэтому объединяйтесь с индексированными запросами, если можете.

db.T.find( { $where: function() { return this.Grade1 > this.Grade2 } } );

или более компактный:

db.T.find( { $where : "this.Grade1 > this.Grade2" } );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...