2014-12-11 1 views
1

Я не хочу, чтобы mongodb создавал поле даты/времени, если я передаю нулевое значение, приведенный ниже код работает для всех типов, не относящихся к дате, но не подходит для типа даты. Вместо этого создается поле даты/времени с нулевым значением. Это фрагмент кода моей bsondocument нижеКак не вставить поле в mongodb, если оно равно null?

{"stringfield", stringfield= string.IsNullOrWhiteSpace(stringfield)?null:stringfield}, 
    {"datetime", datetime.HasValue == false ?null:datetime} 

Примечание: Я не используя каких-либо классов для отображения MongoDB полей в свойствах, а непосредственно создание bsondocument и вставки этого документа в MongoDB.

Я попытался использовать пакет Конвенции со следующим кодом ниже, но я предполагаю, что это применимо только тогда, когда я создаю классы для сопоставления свойств mongofields со свойствами?

 var pack = new ConventionPack(); 
     var ignoreIfNull = new IgnoreIfNullConvention(true); 
     pack.Add(ignoreIfNull); 
     ConventionRegistry.Register("ignoreNulls", pack, t => true); 
+1

См http://stackoverflow.com/a/43259080/194717 – Tony

ответ

1

Обновление: по просьбе людей в комментариях, я включаю правильный ответ на решение со ссылкой в ​​качестве ссылки.

Ниже приведен фрагмент кода, который устанавливает поле даты в документе mongodb, если параметр nullbale 'mydate' имеет значение или просто не создает поле, если оно пустое или пустое.

{ "date", mydate.Value, mydate.HasValue } 

И ниже ссылка ссылка, которая содержит ответ от @Craig Уилсон на MongoDB-Csharp Google группы, как я разместил этот же вопрос там тоже.

How to not insert a field in mongodb if it is null?

+1

Хотя эта ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. – jproffitt

+0

Это не дает ответа на вопрос. Чтобы критиковать или просить разъяснения у автора, оставьте комментарий ниже их сообщения. – AlphaMale

+0

@jproffitt - обновили ответ в соответствии с запросом. – Neville

1

Если вы не хотите вставлять поле с нулевым значением, не вставляйте его с нулевым значением. Вместо этого не помещайте поле в документ вообще. Значение, вместо этого:

db.stuff.insert({ "a" : 1, "b" : null }) 

сделать

db.stuff.insert({ "a" : 1 }) 

Это не может быть проблемой для вас, чтобы вставить нулевые значения полей в любом случае, так как они ведут себя как пропущенные значения для запросов:

> db.test.drop() 
> db.test.insert({ "a" : 1 }) 
> db.test.insert({ "a" : 1, "b" : null }) 
> db.test.count({ "b" : null }) 
2 
+0

Я на самом деле не хотел вставить какие-либо нулевые значения, как я не хотел Монго хранить любые поля, которые являются пустыми, пользуясь его динамическим схемы. Ну, я точно сделал так, как вы упомянули о том, что не вставляете поле вообще, мне пришлось добавить дополнительный if-else с блоками кода, содержащими только обязательные поля на основе условия. Спасибо за помощь!! – Neville