Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.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
c#mongodb如何按id搜索并按字符串数组过滤_C#_Mongodb_Mongodb .net Driver_Asp.net Core 3.1 - Fatal编程技术网

c#mongodb如何按id搜索并按字符串数组过滤

c#mongodb如何按id搜索并按字符串数组过滤,c#,mongodb,mongodb-.net-driver,asp.net-core-3.1,C#,Mongodb,Mongodb .net Driver,Asp.net Core 3.1,我的数据库中有一个类似这样的对象 { "_id":{ "$oid":"5e9de27a4f55601268115efd" }, "UserId":"5e8f649853ed63a6bcf3b22c", "Picture":"/picture/123", "Name":"Test Post APi", "Body":"Testing api", "Likes":[ "5e91f4a9839b426c8cc942b7",

我的数据库中有一个类似这样的对象

{
   "_id":{
      "$oid":"5e9de27a4f55601268115efd"
   },
   "UserId":"5e8f649853ed63a6bcf3b22c",
   "Picture":"/picture/123",
   "Name":"Test Post APi",
   "Body":"Testing api",
   "Likes":[
      "5e91f4a9839b426c8cc942b7",
      "5e91f4a98395e91f4a9839bs4",
      "5e91f4a98395e91f4a98332dg"
   ],
   "DatePosted":{
      "$date":{
         "$numberLong":"1587411900296"
      }
   }
}
当有人喜欢一篇文章时,我尝试通过postId查询我的post对象,并签入likes userId数组(如果它包含userId),然后从数组中删除该userId(不类似),或者将其(类似)添加到数组中(如果不存在)。这些是我目前所拥有的,但它不起作用,有什么帮助吗

 UpdateDefinition<Post> newPostValues;

var findId = Builders<Post>.Filter.Eq("_id", request.Id);
var findLike = Builders<Post>.Filter.ElemMatch(x => x.Likes, x => x == request.PostUserId);
var combineFilters = Builders<Post>.Filter.And(findId, findLike);

var post = await _context.Posts.Find(combineFilters).SingleOrDefaultAsync();

// set value to add like to post 
if (post == null)
{
    newPostValues = Builders<Post>.Update.Push(p => p.Likes, request.UserId);

}
// set new value to remove like from post
else
{
    newPostValues = Builders<Post>.Update.PullFilter(p => p.Likes,
                                                l => l == request.PostUserId);
}

var result = await _context.Posts.UpdateOneAsync(e => e.Id == request.Id, newPostValues);

我已通过执行以下操作解决了此问题

var post = await _context.Posts.Find(x => x.Id == request.Id).SingleOrDefaultAsync();

// add/remove likes from post
var newLikeValue = post.Likes.Contains(request.UserId) ? Builders<Post>.Update.Pull(p => p.Likes, request.UserId) : Builders<Post>.Update.Push(p => p.Likes, request.UserId);

var result = await _context.Posts.UpdateOneAsync(e => e.Id == request.Id, newLikeValue);
var post=await\u context.Posts.Find(x=>x.Id==request.Id).SingleOrDefaultAsync();
//从帖子中添加/删除喜欢的内容
var newLikeValue=post.Likes.Contains(request.UserId)?Builders.Update.Pull(p=>p.Likes,request.UserId):Builders.Update.Push(p=>p.Likes,request.UserId);
var result=await\u context.Posts.UpdateOneAsync(e=>e.Id==request.Id,newLikeValue);

我已通过执行以下操作修复了此问题

var post = await _context.Posts.Find(x => x.Id == request.Id).SingleOrDefaultAsync();

// add/remove likes from post
var newLikeValue = post.Likes.Contains(request.UserId) ? Builders<Post>.Update.Pull(p => p.Likes, request.UserId) : Builders<Post>.Update.Push(p => p.Likes, request.UserId);

var result = await _context.Posts.UpdateOneAsync(e => e.Id == request.Id, newLikeValue);
var post=await\u context.Posts.Find(x=>x.Id==request.Id).SingleOrDefaultAsync();
//从帖子中添加/删除喜欢的内容
var newLikeValue=post.Likes.Contains(request.UserId)?Builders.Update.Pull(p=>p.Likes,request.UserId):Builders.Update.Push(p=>p.Likes,request.UserId);
var result=await\u context.Posts.UpdateOneAsync(e=>e.Id==request.Id,newLikeValue);
使用单个更新查询可能有助于完成此任务。这不是c#虽然。也许将有助于完成它使用一个单一的更新查询。但这不是c#。