我正在尝试使用.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;
}