Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用VB.NET在MongoDB中编写动态文档_Vb.net_Mongodb - Fatal编程技术网

用VB.NET在MongoDB中编写动态文档

用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

在潜伏了15年之后的第一个帖子。我将非常感谢您的帮助。 我的需求很简单:使用JSON数据,向上插入mongodb。有很多记录,这个过程会一次又一次地重复,所以我想要的似乎是BulkWrite。记录的id将保持不变,所有其他字段将需要在每次运行期间更新(例如,使用的天数将频繁更新)。VB是必须的

我的代码如下:

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,@“\。(?=[^”“]*”“:),“:”Regex不是很有用,因为我不想不加区别地替换整个文档。理想情况下,我希望遍历每个字段(我意识到性能会受到影响),或者找到其他方法对每个键/值进行更精细的控制。我开始怀疑MongoDB是否是我最好的选择。我需要处理大量的JSON,但我没有意识到SQL Server有一些内置函数,与MongoDB相比(至少对我来说)非常简单。仍在评估每种方法的优缺点。谢谢你的帮助help@Orson我在答案中添加了一个
Sanitize()
方法。每个文档只增加毫秒。用大量的数据对它进行一次尝试,看看它是如何进行的。