尝试在 MongoDB 上推送新数据时出现错误“超出最大序列化深度”。当使用 MongoDB Community 在 localhost 上进行单元测试时,它可以正常工作。任何帮助,将不胜感激。我也没有看到循环参考。
这是开始保存数据的功能。首先到我的本地缓存,然后到云(MongoDB)。
///Calling function
public async Task AddComment(Range item, Comment commentItem)
{
try
{
//Save to local cache
item.Comments.Add(commentItem);
//Next save to cloud
await CloudStorage.AddComment(item.User.ID, item.ID, commentItem);
}
catch (Exception ex)
{
Debug.WriteLine(ex);
}
}
//-->ERROR HAPPENS LAST LINE HERE<--
public async Task<UpdateResult> AddComment(string ownerID, string rangeID, Comment comment)
{
var filter = Builders<User>.Filter.Where(u => u.ID == ownerID &&
u.Content.Any(i => i.ID == rangeID));
var update = Builders<User>.Update.Push(c => c.Content[-1].Comments, comment);
return await collection.UpdateOneAsync(filter, update); //<- THIS THROWS ERROR
}
这是适用于 localhost 的单元测试。
[TestMethod]
public void TestInsertComment()
{
//Arrange
var owner = "OWNER";
var ownerData = collection.Find(u => u.Username.Equals(owner)).FirstOrDefault();
var ownerID = ownerData?.ID;
var range = ownerData?.Content.FirstOrDefault();
var newComment = new Comment
{
User = range?.User,
Content = "Some comment",
IsLive = true
};
//Act
var results = _cloudStorageService.AddComment(ownerID, range?.ID, newComment);
results.Wait();
var insertedID = collection.Find(u => u.Username.Equals(owner))
.FirstOrDefault().Content.FirstOrDefault()?
.Comments.FirstOrDefault(c => c.ID.Equals(newComment.ID))?.ID;
//Assert
Assert.AreEqual(newComment.ID, insertedID);
}
更新:我注意到的一件事是,如果同一用户尝试向他们的范围添加评论,那是唯一发生此错误的时间。如果另一个用户添加评论,它工作得很好。并且无论是同一个用户还是其他用户,单元测试都可以正常工作。