0

使用 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

我如何在mongo中做到这一点?

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

1 回答 1

1

使用本机 mongo 过滤器运算符,您可以使用findandaggregate过滤 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
        },
    }
]);

但是,根据官方文档中的声明:

Azure Cosmos DB 不支持 $where 和 $eval 运算符。

您可以参考预览版的聚合管道。

或者您可以尝试使用存储过程来选择文档并循环它以比较过滤器列,然后返回所需的数据。(参考包:https ://github.com/lmaccherone/documentdb-lumenize )

于 2019-01-09T07:48:30.730 回答