如果字段为空,如何在 mongodb 中不插入字段

本文关键字:字段 mongodb 插入 如果 | 更新日期: 2023-09-27 18:34:03

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

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

如果字段为空,如何在 mongodb 中不插入字段

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

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

这样做

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

无论如何,插入字段的 null 值可能不是问题,因为它们的行为类似于查询的缺失值:

> 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 }

下面是参考链接,其中包含Mongodb-csharp谷歌小组的@Craig Wilson的答案,因为我也在那里发布了同样的问题。

如果字段为空,如何在 mongodb 中不插入字段?