在MongoDB驱动程序中按boolean == false过滤

问题描述 投票:1回答:1

在我的.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 })将在内存中排序(不好)

c# asp.net mongodb asp.net-core .net-core
1个回答
0
投票

要解决排序问题,请使用:.Sort({IsDeleted:1, Name:1})

© www.soinside.com 2019 - 2024. All rights reserved.