在我的.NET Core应用程序中,我有带有道具的模型,例如
{
public ObjectId Id { get; set; }
public bool IsDeleted { get; set; }
public string Name { get; set; }
}
并尝试进行查询:
var filter = Collection.Find(x => !x.IsDeleted);
我有这样的查询过滤器文档(filter.ToString()
):
{ "IsDeleted": { $ne: true } }
有什么办法代替这样的过滤器吗?
{ "IsDeleted": false }
由于bool
不可为空,因此必须将其设为false
。当然,我可以这样写,并且可以工作,但是有点奇怪:
Collection.Find(x => x.IsDeleted == false)
我在[BsonRequired]
上尝试了[BsonDefaultValue(false)]
和IsDeleted
属性,但是没有运气。
PS。我需要这个原因,因为它无法按MongoDB中的索引排序。例如,如果我们有复合索引{IsDeleted: 1, Name: 1}
,则collection.find({ IsDeleted: false }).sort({ Name: 1 })
将按索引排序,但是collection.find({ IsDeleted: { $ne: true } }).sort({ Name: 1 })
将在内存中排序(不好)
要解决排序问题,请使用:.Sort({IsDeleted:1, Name:1})