我有一个文档,上面可以有一个“ Favorites”元素,我正在尝试将新值推入该元素的数组中。但是,出现错误,因为我要更新的文档没有“收藏夹”元素。如果不存在该如何创建元素,以便可以将新值推入其array属性?我可以一次操作吗?这是我在做什么,但出现错误cannot use the part (Favorites of Favorites.ProgramIds) to traverse the element ({Favorites: null})
var filter = Builders<UserEntity>.Filter.Eq(u => u.Id, userId);
var update = isFavorite ? Builders<UserEntity>.Update.AddToSet(u => u.Favorites.ProgramIds, id)
: Builders<UserEntity>.Update.Pull(u => u.Favorites.ProgramIds, id);
await collection.UpdateOneAsync(filter, update);
[如果Favorities数组有可能为null,则必须在使用“ addToSet”或“ push”之前创建该数组,否则会出现错误:
MongoDB.Driver.MongoWriteException:'写入操作导致错误。无法将$ addToSet应用于非数组字段。名为“收藏夹”的字段具有非数组类型null'
在下面的示例中,如果数组为null,则设置一个新数组
var filter = Builders<UserEntity>.Filter.Eq(u => u.Id, userId);
if (!isTheFavoritesArrayNotNull)
{
await collection.UpdateOneAsync(filter,
isFavorite ? Builders<UserEntity>.Update.Set(u => u.Favorites, new List<Favorite>()));
}
await collection.UpdateOneAsync(filter,
Builders<UserEntity>.Update.AddToSet(u => u.Favorites.ProgramIds, id));