我想更新或插入到mongo集合“成员”中。在这个集合下,我有一个数组MagazineSubscription。在这里,杂志Code是唯一的。请参考示例JSON。
因此,如果需要使用C#mongo驱动程序更新或插入mongo。
我有什么方法可以一步一步完成。就像如果它已经存在一样,则更新,否则插入。而不是打两次。因为我的收藏很大。
{
"_id" : ObjectId("5c44f7017en0893524d4e9b1"),
"Code" : "WH01",
"Name" : "Lara",
"LastName" : "John",
"DOB" : "12-10-2017",
"Gender" : "Male",
"Dependents" : [
{
"RelationShip" : "Son",
"Name" : "JOHN",
"DOB" : "01-01-1970",
"Gender" : "Male",
"Address" : "Paris",
"ContactNumber" : "+312233445666"
},
{
"RelationShip" : "Wife",
"Name" : "Marry",
"DOB" : "01-01-1980",
"Gender" : "Female",
"Address" : "Paris",
"ContactNumber" : "+312233445666"
}
]
"Matrimony" : [
{
"Fee" : 1000.0,
"FromDate" : "01-01-2015",
"ToDate" : "01-01-2017",
"Status" : false
}
],
"MagazineSubscription" : [
{
"MagazineCode" : "WSS",
"DateFrom" : "01-05-2018",
"DateTo" : "01-01-2020",
"PaidAmount" : 1000.0,
"ActualCost" : 1500.0,
"Status" : false,
"DeliveryStatus" : [
{
"ReturnedDate" : "10-01-2019",
"Comment" : "Returned because of invalid address"
},
{
"ReturnedDate" : "10-02-2019",
"Comment" : "Returned because of invalid address"
}
]
}
]
}
答案 0 :(得分:0)
在upsert:true中使用mongodb的更新操作。 请参考此处:https://docs.mongodb.com/manual/reference/method/db.collection.update/
以下是页面中的示例:
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>, //you need this option
multi: <boolean>,
writeConcern: <document>,
collation: <document>,
arrayFilters: [ <filterdocument1>, ... ]
}
)
根据您的需求,这是一个类似的问题: Upserting in Mongo DB using official C# driver
编辑1
步骤:
Mongodb将使用您的过滤器搜索文档。如果找到,它将使用更新部分执行您提到的更新。
如果该文档不存在,则将使用更新部分中的筛选键+键来创建新文档。
希望让事情变得很清楚,因为我从未使用过C#mongo驱动程序。因此,我将无法为您提供确切的语法。
编辑2
我在这里提供@jeffsaracco的解决方案:
MongoCollection collection = db.GetCollection("matches");
var query = new QueryDocument("recordId", recordId); //this is the filter
var update = Update.Set("FirstName", "John").Set("LastName","Doe"); //these are the keys to be updated
matchCollection.Update(query, update, UpdateFlags.Upsert, SafeMode.False);