C# 如果mongodb中的字段为空,如何不在其中插入?

C# 如果mongodb中的字段为空,如何不在其中插入?,c#,asp.net,.net,mongodb,mongodb-.net-driver,C#,Asp.net,.net,Mongodb,Mongodb .net Driver,我不想让mongodb创建日期/时间字段,如果我传递的是空值,下面的代码适用于所有非日期类型,但对日期类型无效。它创建一个日期/时间字段,改为空值。下面是我的B文档的代码片段 {"stringfield", stringfield= string.IsNullOrWhiteSpace(stringfield)?null:stringfield}, {"datetime", datetime.HasValue == false ?null:datetime} 注意:我没有使用任何类将

我不想让mongodb创建日期/时间字段,如果我传递的是空值,下面的代码适用于所有非日期类型,但对日期类型无效。它创建一个日期/时间字段,改为空值。下面是我的B文档的代码片段

   {"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);

如果不想插入空值字段,请不要插入空值字段。相反,根本不要将该字段放在文档中。而不是这个意思:

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

更新:根据评论中人们的要求,我将包括对解决方案的正确回答,并将链接作为参考

下面是一段代码,如果nullbale“mydate”参数有值,则在mongodb文档中设置日期字段;如果字段为null或为空,则不创建该字段

{ "date", mydate.Value, mydate.HasValue }
下面是参考链接,其中包含了@Craig Wilsonmongodb csharp谷歌群上的答案,我也在那里发布了同样的问题


我实际上不想插入任何空值,因为我不想让mongo利用其动态模式存储任何空字段。好的,我已经完全按照你提到的方法做了,完全没有插入字段,我不得不添加一个额外的if-else,代码块只包含基于条件的必需字段。谢谢你的帮助!!虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能无效。这不会提供问题的答案。若要评论或要求作者澄清,请在其帖子下方留下评论。@jproffitt-已根据要求立即更新答案。@AlphaMale-它确实提供了问题的答案,解决方案已在链接中描述,我不要求作者在这里作出任何澄清,但提供了一个有效的链接,该链接以一种非常有效的方式为我提供了解决方案。请参阅