如果它是null,如何不在mongodb中插入字段?

时间:2014-12-11 07:27:00

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

我不希望mongodb创建日期/时间字段,如果我传递的是空值,则下面的代码适用于所有非日期类型但是日期类型失败。它创建一个带有空值的日期/时间字段。这是我的bsondocument下面的代码片段

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

注意:我没有使用任何类将mongodb字段映射到属性,而是直接创建bsondocument并在mongodb中插入该文档。

我尝试使用下面的代码使用Convention包,但我想这只适用于我创建类来将mongofields映射到属性?

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

更新:根据评论中的人员的要求,我提供了一个正确的解决方案,并以链接作为参考。

如果nullbale' mydate'以下是在mongodb文档中设置日期字段的代码段。参数有一个值,或者如果它的null或为空,则根本不创建该字段。

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

以下是包含 @Craig Wilson mongodb-csharp Google群组中的答案的参考链接,因为我也在那里发布了同样的问题。< / p>

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