使用单声道c#驱动程序比较mongo集合的两个字段

时间:2017-01-29 11:40:15

标签: c# .net mongodb mongodb-query mongodb-.net-driver

对Mongodb和C#驱动程序来说是全新的。

在Ubuntu 14.04上使用Monodevelop进行开发,Mongodb的版本是3.2.10:

目前我的代码有一个POCO如下:

public class User
{
    public String Name { get; set;}
    public DateTime LastModifiedAt { get; set;}
    public DateTime LastSyncedAt { get; set;}

     public User ()
    {

    }
}

能够创建集合并添加用户。

如何找到LastModifiedAt时间戳大于LastSyncedAt时间戳的用户?做了一些搜索,但没有找到答案。

任何建议都会有很大的帮助

由于

1 个答案:

答案 0 :(得分:1)

实际上,它并不是很简单。这应该是可能的,例如:

var users = collection.Find(user => user.LastModifiedAt > user.LastSyncedAt).ToList();

但不幸的是MongoDriver无法翻译这个表达。 您可以查询所有用户并在客户端进行过滤:

var users = collection.Find(Builders<User>.Filter.Empty)
                      .ToEnumerable()
                      .Where(user => user.LastModifiedAt > user.LastSyncedAt)
                      .ToList();

或发送json查询,因为MongoDb本身能够做到:

var jsonFliter = "{\"$where\" : \"this.LastModifiedAt>this.LastSyncedAt\"}";
var users = collection.Find(new JsonFilterDefinition<User>(jsonFliter))
                      .ToList();

而且,是的,你需要一个Id - 你的模型类的属性,我没有先提到它,因为我认为你有一个,只是没有在问题中发布。