MongoDB Использование Java, как я могу отфильтровать 2 поля одного и того же документа - PullRequest
0 голосов
/ 09 января 2019

Использование Mongo DB (Azure cosmos DB) и мне нужно отфильтровать объекты на основе 2 поля внутри документов

Вот пример класса:

class Event{
   public long startTime;
   public long endTime;
}

Мне нужно найти все события, которые их startTime == endTime

В sql я бы сделал

Select * from Events where startTime=endTime
or
Select * from Events where startTime!=endTime

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

collection.find(???).first();

1 Ответ

0 голосов
/ 09 января 2019

С оператором встроенного фильтра Монго вы можете использовать find и aggregate для фильтрации startTime==endTime:

найти

db.test.find({
    "$where": "this.fields1 == this.fields2"
});

Совокупный

db.test.aggregate([
    {
        $project:{
            fields1: 1,
            fields2: 1,
            difference: { $eq: ["$fields1", "$fields2"]}
        },
    },
    {
        $match: {
            difference: true
        },
    }
]);

Однако на основании заявлений в официальном документе :

Операторы $ where и $ eval не поддерживаются Azure Cosmos. БД. * +1021 *

Вы могли бы обратиться к конвейеру агрегации , который является предварительной версией.

Или вы можете попробовать использовать хранимую процедуру , чтобы выбрать документы и выполнить цикл для сравнения столбцов фильтра, а затем вернуть нужные данные (для справочных пакетов: https://github.com/lmaccherone/documentdb-lumenize)

...