用VB.NET在MongoDB中编写动态文档
在潜伏了15年之后的第一个帖子。我将非常感谢您的帮助。 我的需求很简单:使用JSON数据,向上插入mongodb。有很多记录,这个过程会一次又一次地重复,所以我想要的似乎是BulkWrite。记录的id将保持不变,所有其他字段将需要在每次运行期间更新(例如,使用的天数将频繁更新)。VB是必须的 我的代码如下:用VB.NET在MongoDB中编写动态文档,vb.net,mongodb,Vb.net,Mongodb,在潜伏了15年之后的第一个帖子。我将非常感谢您的帮助。 我的需求很简单:使用JSON数据,向上插入mongodb。有很多记录,这个过程会一次又一次地重复,所以我想要的似乎是BulkWrite。记录的id将保持不变,所有其他字段将需要在每次运行期间更新(例如,使用的天数将频繁更新)。VB是必须的 我的代码如下: Dim client As MongoClient Dim db As IMongoDatabase client = New MongoClient("mongodb://localh
Dim client As MongoClient
Dim db As IMongoDatabase
client = New MongoClient("mongodb://localhost/")
db = client.GetDatabase("db")
Dim collection As IMongoCollection(Of BsonDocument) = db.GetCollection(Of BsonDocument)("employees")
Dim documents As New List(Of BsonDocument)
''CREATE 10 documents to insert into the collection
''''''''''''''''''''''''''''''''''''''''''''''''''''''''
For i As Integer = 1 To 10
Dim emp As BsonDocument = New BsonDocument
With emp
.Add("_id", "x" & i) 'Guid.NewGuid().ToString)
.Add("name", "George Jones")
.Add("first_name", "George")
.Add("days_employed", "24")
.Add("job_desc", "Coder")
.Add("location", "Istanbul")
End With
documents.Add(emp)
Next
'bulkwrite documents into collection
collection.BulkWrite(documents.[Select](Function(d) New InsertOneModel(Of BsonDocument)(d)))
但正如你所看到的,这只是插入,而不是插入。我想我需要使用UpdateNodeModel而不是InsertOneModel,但是UpdateNodeModel接受过滤器和更新参数。我不知道如何动态创建update参数。我发现的每个示例都将更新值硬编码到示例中,但在我的示例中,这些数据来自另一个源。任何帮助都将不胜感激。如果我不清楚,我道歉,如果需要,我会尽力澄清。如果有另一种完全不同的方式来完成同样的任务,我也非常乐意接受。我来自SQL Server,我发现它简单得多,但需要处理大量数据(每天数百万条记录),我想看看mongodb是否有性能改进。NET代码示例不多,VB示例几乎为零
提前谢谢
编辑:
添加了一个将要使用的JSON示例:
{
"name": "George Jones",
"status": "SUCCESS",
"days_employed": 28,
"appointments": {
"2020-03-12:0": {
"2pm": [
{
"apptWith": "Alex Thompson",
"MaxLength": 90,
"description": "Product Development",
"meetingLocation": "New York"
}
],
"4pm": [
{
"apptWith": "Paul Jones",
"MaxLength": 60,
"description": "Accounting",
"meetingLocation": "New York"
}
]
},
"2020-03-14:7": {
"1130am": [
{
"apptWith": "Mike Rogers",
"MaxLength": 90,
"description": "Product Development",
"meetingLocation": "San Diego"
}
],
"230pm": [
{
"apptWith": "Felix Henderson",
"MaxLength": 30,
"description": "Accounting",
"meetingLocation": "San Diego"
}
]
}
},
"appointmentRequests": {
"2020-03-10:0": {
"8am": [
{
"apptWith": "Jose Guitierez",
"MaxLength": 60,
"description": "Product Launch",
"meetingLocation": "Orlando"
}
],
"3pm": [
{
"apptWith": "Ronald Clubman",
"MaxLength": 60,
"description": "Marketing",
"meetingLocation": "New York"
}
]
},
"2020-03-11:7": {
"1130am": [
{
"apptWith": "Phil Norton",
"MaxLength": 90,
"description": "Supply Chain",
"meetingLocation": "New York"
}
],
"130pm": [
{
"apptWith": "Felix Henderson",
"MaxLength": 60,
"description": "Manufacturing",
"meetingLocation": "San Francisco"
}
]
}
}
}
这似乎完成了工作:
Imports System.Net.Http
导入MongoDB.Bson
导入MongoDB.Bson.Serialization
导入MongoDB.Driver
导入System.Text.RegularExpressions
模块程序
作为IMongoCollection的私有只读集合(属于B文档)=
新MongoClient(“mongodb://localhost/").
获取数据库(“测试”)。
GetCollection(b文件)(“员工”)
Sub Main(参数为字符串())
Dim docs=GetDocs()
Dim模型=新列表(替换模型(BsonDocument))()
尺寸i=1
虽然我已经几十年没有接触过vb了,但我可以尝试一下。您能告诉我们您的源json数据是什么样子的吗?您想保留源json中相同的Id
,还是为mongodb记录创建自己的Id
?您还会反对使用mongodb驱动程序包装来简化事情吗?@RyanGunner感谢您提供的帮助。我更新了我的原始帖子以显示源json。我将根据其中包含的值为每个约会/约会请求创建自定义ID。我并不反对使用mongodb驱动程序包装库本身,但我更愿意不这样做,这样我就可以更好地了解未来。再次感谢您提供的任何帮助@Ryan Gunner我刚刚注意到你是包装器库的创建者。如果它能节省时间的话,我很乐意使用它,我也希望能学到很多东西谢谢!这很有帮助。但是,如果源数据包含句点(例如,请注意时间中有句点),mongo似乎会抛出错误,因为它是保留字符。在升级之前,如何用另一个字符(比如:或-)替换句点?我注意到,如果字符串以$开头,也会出现同样的问题,我认为这对于许多存储货币值的人来说是一个主要问题。@Orson您可以使用regex。下面是一个c#示例:json=Regex.Replace(json,@“\。(?=[^”“]*”“:),“:”但是,整个文档的code>Regex不是很有用,因为我不想不加区别地替换整个文档。理想情况下,我希望遍历每个字段(我意识到性能会受到影响),或者找到其他方法对每个键/值进行更精细的控制。我开始怀疑MongoDB是否是我最好的选择。我需要处理大量的JSON,但我没有意识到SQL Server有一些内置函数,与MongoDB相比(至少对我来说)非常简单。仍在评估每种方法的优缺点。谢谢你的帮助help@Orson我在答案中添加了一个Sanitize()
方法。每个文档只增加毫秒。用大量的数据对它进行一次尝试,看看它是如何进行的。