MongoDB推送到空数组

本文关键字:数组 MongoDB | 更新日期: 2023-09-27 18:15:23

所以今天我意识到我有一个更新/推到数组的问题。我在类中有一个数组它只是一个auto属性

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数组。

我通过在类 上添加一个私有的backer来解决这个问题。
private List<things> _things = new List<things>();
public List<things> Things { get { return _things;} set { _things = value;} }

现在至少一个新的实例将有一个空数组并且需要有人显式地说

Things = null

但是我想知道是否有更好的方法来解决这个问题。修饰符?蒙戈指数吗?嘿,这个字段必须总是一个数组。

我一直对auto属性持怀疑态度,更喜欢使用private backer,特别是对于非原语。只是想知道是否存在一个更强大的解决方案,内置到Mongo引擎。

MongoDB推送到空数组

如果您希望使用自动属性,您可以简单地让构造函数创建空列表。

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

那么auto属性就简单地工作了,唯一难看的地方就是构造函数。

This is What I do

在启动应用程序时使用一些转换脚本也是一个不错的主意

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