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引擎。
如果您希望使用自动属性,您可以简单地让构造函数创建空列表。
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>