强制MongoDB使用C#驱动程序存储0值

时间:2015-03-19 15:57:38

标签: c# mongodb

我在使用带有C#的MongoDB时遇到了一个问题,如果我发送一个对象存储在mongo中,则不存储任何= 0的整数值。

例如,如果我有这样的课程:

public class Data
{
    public int x { get; set; }
    public int y { get; set; }
}

然后我创建了一个值为x = 1和y = 0的实例并将其存储在mongo中,结果将是:

{
    "x" : 1
}

而我想要的是:

{
    "x" : 1,
    "y" : 0
}

我觉得我必须遗漏一些东西,因为我找不到其他人有这个问题。

我需要0值的原因是因为我需要将它与mongo聚合函数一起使用。

感谢。

2 个答案:

答案 0 :(得分:0)

我无法重现您的报道内容。我使用您的Data类创建了一个测试程序,并将文档存储在MongoDB中,如下所示:

var document = new Data { x = 1, y = 0 };
collection.Insert(document);

然后我使用MongoDB shell来查看插入到数据库中的内容:

> db.data.find()
{ "_id" : ObjectId("550c7542f266222543e1d16d"), "x" : 1, "y" : 0 }
>

它确实存储了值为0的y。

您是否配置了可能覆盖0值序列化的任何约定?

答案 1 :(得分:0)

您可以为您的 Data 类注册类映射,如下所示,以指示 mongodb 存储 y 的默认值。

BsonClassMap.RegisterClassMap<Data>( cm => 
{
   cm.AutoMap();
   cm.MapMember(d => d.y).SetIgnoreIfDefault(false);
});