2016-06-14 4 views
3

У меня есть очень простой запрос для Монго:Проверьте поле Равно Null в MongoDb C# Driver 2,0

db.items.find({ MyFieldName: { $exists: true, $eq: null } }); 

Не то, что ему нужно объяснить, но он находит документы, которые имеют MyFieldName и где значение это поле null. Похоже, что это было бы очень просто сделать с водителем C#:

var fieldExistsFilter= Builders<BsonDocument>.Filter.Exists("MyFieldName", true); 
var fieldValueIsNullFilter = Builders<BsonDocument>.Filter.Eq("MyFieldName", null); 

Однако второй фильтр, fieldValueIsNullFilter, не строить, если я пытаюсь проверить нуль. Он отлично работает, если я пишу "testString" или что-то в этом роде, но не с нулевым.

tl: dr; version: Как создать фильтр, чтобы проверить, является ли поле null в MongoDb C# драйвером?

Заметь, я проверил другие ответы, и они рекомендуют $ существует ли то, что я хочу - это делает не так, как на mongo docs:

Когда правда, $ существует сопоставляет документы, содержащие поле, включая документы, в которых значение поля равно. Если является ложным, запрос возвращает только те документы, которые не содержат поля .

ответ

11

Это на самом деле работает, как ожидается, с небольшой модификацией, которая зависит от:

BsonNull.Value

Смотрите этот вопрос для деталей: How to create Bson Document with Null value using C# official driver?

Так запрос это:

var fieldValueIsNullFilter = Builders<BsonDocument>.Filter.Eq("MyFieldName", BsonNull.Value); 

Первоначально я не знал, что BsonNull имеет Value.

+1

Это ответ, вы должны принять его как ответ. В этом нет ничего плохого. –

+0

Хорошо, сделаю. Похоже, есть двухдневный обратный отсчет, прежде чем я смогу его принять. – VSO

Смежные вопросы