ホーム>source

15年の潜伏後の最初の投稿。私はどんな助けにもとても感謝します。 私のニーズは単純です。JSONデータを消費し、mongodbにアップサートします。多くのレコードがあり、このプロセスは何度も繰り返されるので、BulkWriteが私が欲しいもののようです。レコードのIDは一定のままで、他のすべてのフィールドは実行ごとに更新される必要があります(たとえば、days_employedは頻繁に更新されます)。 VBは必須です。

これまでの私のコードは次のとおりです。

<前>ウィズウィズ

しかし、ご覧のとおり、これは単に挿入するだけで、アップサートされません。 InsertOneModelの代わりにUpdateOneModelを使用する必要があると思いますが、UpdateOneModelはフィルターおよび更新パラメーターを取ります。更新パラメーターを動的に作成する方法がわかりません。私が見つけたすべての例では、更新値を例にハードコードしていますが、私の場合、そのデータは別のソースからのものです。どんな助けでも大歓迎です。不明な点がある場合はお詫びし、必要に応じて明確にするよう努めます。この同じタスクを達成する別の完全に異なる方法がある場合、私はそれにも非常にオープンです。私はSQL Serverを使用していますが、はるかに単純ですが、大量のデータ(毎日数百万のレコード)を処理する必要があり、mongodbでパフォーマンスが向上するかどうかを確認したいと考えています。 .NETコードの例は多くなく、VBサンプルはほとんどありません。

前もって感謝します!

編集: 消費されるJSONの例を追加しました。

<前>ウィズウィズ 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)))
あなたの答え
  • 解決した方法 # 1

    これは仕事を終わらせているようです:

    ウィズウィズ
    

    余談ですが、このvbコードを記述しなければならないので、c#をもっと高く評価できます:-)

    Imports System.Net.Http Imports MongoDB.Bson Imports MongoDB.Bson.Serialization Imports MongoDB.Driver Imports System.Text.RegularExpressions Module Program Private ReadOnly collection As IMongoCollection(Of BsonDocument) = New MongoClient("mongodb://localhost/"). GetDatabase("test"). GetCollection(Of BsonDocument)("employees") Sub Main(args As String()) Dim docs = GetDocs() Dim models = New List(Of ReplaceOneModel(Of BsonDocument))() Dim i = 1 While i <= docs.Length OrElse i = 10 Dim doc = docs(i - 1) Sanitize(doc) doc.Add("_id", "x" & i.ToString()) 'make sure to generate the same id everytime for upsert to work Dim upsert = New ReplaceOneModel(Of BsonDocument)( filter:=Builders(Of BsonDocument).Filter.Eq(Of String)("_id", doc.GetValue("_id")), replacement:=doc) With {.IsUpsert = True} models.Add(upsert) i += 1 End While collection.BulkWrite(models) End Sub Private Function GetDocs() As BsonDocument() Using client = New HttpClient() Dim json = client.GetStringAsync("https://pastebin.com/raw/QtMquCps").GetAwaiter().GetResult() Return BsonSerializer.Deserialize(Of BsonArray)(json).[Select](Function(p) p.AsBsonDocument).ToArray() End Using End Function Private Sub Sanitize(ByRef doc As BsonDocument) doc = BsonDocument.Parse( Regex.Replace( doc.ToString(), """\w+\.\w+""\s*:", Function(m) m.Value.Replace(".", ":"))) End Sub End Module

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ css - Bootstrap 4で固定幅のinput-group-append divを定義します