在MongoDb C#驱动程序中无法推送到深度嵌套数组

时间:2018-11-25 20:32:23

标签: c# mongodb asp.net-core

我正在尝试使用.NET Core 2中的C#驱动程序在Mongodb中推送到深度嵌套的数组(2-deep)。

代码看起来正确,可以正常编译并在Postman中返回成功的响应。但是,当我在Compass中寻找新项目时,它不存在。

我可以使用LINQ毫无问题地将数组推到第一个数组(问题),但是我不确定第二层的元素匹配方法在哪里出错。我试图找到一种使用LINQ的方法,但是找不到正确的代码。我

有什么主意我可能做错了吗?

粗略模式:

Quiz
{
   ObjectId Id { get; set;}
   List<Question> Questions { get; set;}
}

// 1st array - easy to push to

Question
{
   ObjectId Id { get; set;}
   string text { get; set;} 
   List<Answer> Answers { get; set; }
}

// 2nd level - having trouble pushing to

Answer
{
   ObjectId Id { get; set;}
   string text { get; set;} 
}

代码

 public static ResponseMessage AddAnswer(string id, string questionId, Answer answer)
        {
            ResponseMessage result = new ResponseMessage()
            {
                Code = HttpStatusCode.Created,
                Message = "ANSWER_CREATED"
            };


            IMongoCollection<Quiz> col = DatabaseHelper.QuizCol;

            try
            {
                UpdateDefinition<Quiz> update = Builders<Quiz>.Update.Push("Questions.$[q].Answers", answer);
                col.UpdateOne<Quiz>(x => x.Id == ObjectId.Parse(id), update, new UpdateOptions
                {
                    ArrayFilters = new List<ArrayFilterDefinition>
                    {
                        new BsonDocumentArrayFilterDefinition<BsonDocument>(new BsonDocument("q.Id", ObjectId.Parse(questionId))),
                    }
                });
                answer = DecorateAnswer(id, questionId, answer);
                result.Identifier = answer.Id.ToString();
                result.Resource = answer.Resource;
            }
            catch (MongoException ex)
            {
                result.Code = HttpStatusCode.BadRequest;
                result.Message = ex.Message;
            }
            return result;
        }

0 个答案:

没有答案