MongoDB推送到null数组

时间:2014-07-29 18:44:26

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

所以今天我意识到我在更新/推送到数组时遇到了问题。我在一个只有一个自动属性的类中有一个数组

public List<things> Things { get; set; }

这可以作为null放入数据库中,如果我以后需要编写像

这样的查询
var query = Query.EQ("_id", something.Id);
var update = Update.Push("Things", thing.ToBsonDocument());

coll.Update(query, update);

我现在遇到了一个问题,因为我的更新会抛出一个我试图推送到NULL数组的异常。

我通过在课堂上放置私人支持者来解决这个问题

private List<things> _things = new List<things>();
public List<things> Things { get { return _things;} set { _things = value;} }

现在至少一个新实例将有一个空数组,有人需要明确说出

Things = null

但我想知道是否有更好的方法来解决这个问题。装饰?蒙古指数?有话要说,嘿,这个领域必须始终是一个数组。

我一直对汽车属性持怀疑态度,而更喜欢使用私人支持者,尤其是非原始人。只是想知道Mongo引擎中是否存在更强大的解决方案。

2 个答案:

答案 0 :(得分:3)

如果您更喜欢使用autoproperties,您可以让构造函数创建空列表。

public YourClass() 
{
   Things = new List<things>();
}

然后auto属性工作简单,唯一具有任何丑陋的地方是构造函数。

这就是我的工作

答案 1 :(得分:2)

当你启动你的应用程序时,一些转换脚本也不是一个坏主意

<code>
var emptyInterUsers = db.List<UserEntity>(u => u.Interests == null);
if (emptyInterUsers.Any())
{
    foreach (var u in emptyInterUsers)
    {
        if (u.Interests == null)
        {
            var filter = db.F<UserEntity>().Eq(f => f.id, u.id);
            var update = db.U<UserEntity>().Set(f => f.Interests, new List<int>());
            var res = await db.UpdateAsync(filter, update);
        }
    }                   
}
</code>