将新记录插入记录 MongoDB C# 上对象的数组
Insert new record to array on object on a record MongoDB C#
我有一个 table 来存储具有这样记录的用户。
{
"_id" : "",
"Username" : "",
"Points" : 0,
"CompletedAchievements" : {
"Public": [],
"Private": []
},
"ActiveAchievements" : {
"Public": [],
"Private": []
},
"Kudos" : [],
"Teams" : [],
"UserType" : "Admin",
"PrivateAchievements": []
}
我的 C# 代码
public void Add<T>(string userId, string achievementId, int progress) {
var collection = this.db.GetCollection<T>(typeof(T).Name);
var filter = Builders<T>.Filter.And(
Builders<T>.Filter.Eq("_id", userId),
Builders<T>.Filter.Eq("ActiveAchievements.Public", "Public"));
var update = Builders<T>.Update.Push("ActiveAchievements.$.Public", new
ActiveAchievement() { _id = achievementId, Progress = progress });
collection.FindOneAndUpdateAsync(filter, update);
}
我正在尝试为活跃成就中的 Public 数组添加一个值。有谁知道为什么这不起作用?
最终是一个简单的修复。
只有 1 个过滤器需要 _id 过滤器来获取记录。
var filter = Builders<T>Filter.Eq("_id", userId);
完成后,我可以对对象的数组进行以下更新。
var update = Builders<T>.Update.Push("ActiveAchievements.Public", new
ActiveAchievement() { _id = achievementId, Progress = progress });
我有一个 table 来存储具有这样记录的用户。
{
"_id" : "",
"Username" : "",
"Points" : 0,
"CompletedAchievements" : {
"Public": [],
"Private": []
},
"ActiveAchievements" : {
"Public": [],
"Private": []
},
"Kudos" : [],
"Teams" : [],
"UserType" : "Admin",
"PrivateAchievements": []
}
我的 C# 代码
public void Add<T>(string userId, string achievementId, int progress) {
var collection = this.db.GetCollection<T>(typeof(T).Name);
var filter = Builders<T>.Filter.And(
Builders<T>.Filter.Eq("_id", userId),
Builders<T>.Filter.Eq("ActiveAchievements.Public", "Public"));
var update = Builders<T>.Update.Push("ActiveAchievements.$.Public", new
ActiveAchievement() { _id = achievementId, Progress = progress });
collection.FindOneAndUpdateAsync(filter, update);
}
我正在尝试为活跃成就中的 Public 数组添加一个值。有谁知道为什么这不起作用?
最终是一个简单的修复。 只有 1 个过滤器需要 _id 过滤器来获取记录。
var filter = Builders<T>Filter.Eq("_id", userId);
完成后,我可以对对象的数组进行以下更新。
var update = Builders<T>.Update.Push("ActiveAchievements.Public", new
ActiveAchievement() { _id = achievementId, Progress = progress });