Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用MongoDB C#驱动程序2.0添加元素或添加到数组_C#_Arrays_Mongodb_Mongodb .net Driver_Mongodb Csharp 2.0 - Fatal编程技术网

使用MongoDB C#驱动程序2.0添加元素或添加到数组

使用MongoDB C#驱动程序2.0添加元素或添加到数组,c#,arrays,mongodb,mongodb-.net-driver,mongodb-csharp-2.0,C#,Arrays,Mongodb,Mongodb .net Driver,Mongodb Csharp 2.0,我有一个文档,上面可以有一个“Favorites”元素,我正试图将一个新值推送到该元素的数组中。但是,我得到了一个错误,因为我试图更新的文档没有“Favorites”元素。如果元素不存在,如何创建它,以便将新值推送到它的数组属性中?我能一次做完吗?下面是我正在做的,但是我得到了一个错误无法使用部分(Favorites.ProgramIds的收藏夹)遍历元素({Favorites:null}) var-filter=Builders.filter.Eq(u=>u.Id,userId); var u

我有一个文档,上面可以有一个“Favorites”元素,我正试图将一个新值推送到该元素的数组中。但是,我得到了一个错误,因为我试图更新的文档没有“Favorites”元素。如果元素不存在,如何创建它,以便将新值推送到它的数组属性中?我能一次做完吗?下面是我正在做的,但是我得到了一个错误
无法使用部分(Favorites.ProgramIds的收藏夹)遍历元素({Favorites:null})

var-filter=Builders.filter.Eq(u=>u.Id,userId);
var update=isFavorite?Builders.Update.AddToSet(u=>u.Favorites.ProgramIds,id)
:Builders.Update.Pull(u=>u.Favorites.ProgramIds,id);
wait collection.UpdateOneAsync(过滤器,更新);

如果希望忽略重复项,可以使用,它将创建或追加到数组中,并将其视为一个集合。如果您只希望它是一个普通数组,那么使用。如果显式使用$push并出现错误,则不应该这样做,这是另一个问题;请参阅官方文档:“如果要更新的文档中缺少字段,$push将添加数组字段,该字段的值作为其元素。”

如果希望忽略重复项,可以使用,它将创建或追加到数组中,并将其视为一个集合。如果您只希望它是一个普通数组,那么使用。如果显式使用$push并出现错误,则不应该这样做,这是另一个问题;请参阅官方文档:“如果要更新的文档中没有该字段,$push将添加数组字段,该字段的值作为其元素。”

如果偏好数组可能为空,则必须在使用“addToSet”或“push”之前创建数组,否则会出现错误:

MongoDB.Driver.MongoWriteException:'写入操作导致错误。 无法将$addToSet应用于非数组字段。名为“收藏夹”的字段具有非数组类型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));
var-filter=Builders.filter.Eq(u=>u.Id,userId);
如果(!isTheFavoritesArrayNotNull)
{
等待集合。UpdateOneAsync(过滤器,
isFavorite?Builders.Update.Set(u=>u.Favorites,new List());
}
等待集合。UpdateOneAsync(过滤器,
Builders.Update.AddToSet(u=>u.Favorites.ProgramIds,id));

如果偏好数组可能为空,则必须在使用“addToSet”或“push”之前创建数组,否则会出现错误:

MongoDB.Driver.MongoWriteException:'写入操作导致错误。 无法将$addToSet应用于非数组字段。名为“收藏夹”的字段具有非数组类型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));
var-filter=Builders.filter.Eq(u=>u.Id,userId);
如果(!isTheFavoritesArrayNotNull)
{
等待集合。UpdateOneAsync(过滤器,
isFavorite?Builders.Update.Set(u=>u.Favorites,new List());
}
等待集合。UpdateOneAsync(过滤器,
Builders.Update.AddToSet(u=>u.Favorites.ProgramIds,id));

如果数组元素不存在,这两种方法仍然会导致错误。我的问题是,如果数组不存在,如何插入数组本身,然后将值插入该数组;您的问题(现在我可以看到您的编辑)看起来是因为您试图在字段存在之前基于字段进行遍历。好的,这是有意义的,但我仍然不知道如何编写它以使其工作。对我来说,这听起来是另一个问题。如果数组元素不存在,这两种方法仍然会导致错误。我的问题是,如果数组不存在,如何插入数组本身,然后将值插入该数组;您的问题(现在我可以看到您的编辑)看起来是因为您试图在字段存在之前基于字段进行遍历。好的,这是有意义的,但我仍然不知道如何编写它以使其工作。对我来说,这听起来是另一个问题。如果数组元素不存在,这两种方法仍然会导致错误。我的问题是,如果数组不存在,如何插入数组本身,然后将值插入该数组;您的问题(现在我可以看到您的编辑)看起来是因为您试图在字段存在之前基于字段进行遍历。好的,这是有道理的,但我仍然不知道如何编写它以使其工作。对我来说,这听起来是另一个问题。