2017-01-23 17 views
0

私はMongoDBにコレクションを持ち、VBネットでMongoDBドライバを使用しています。条件に応じていくつかの文書を更新したい。 これはLINQを使用したいのですが、選択によってエラーが発生し、修正方法がわかりません。VBネットとMongo:LINQでwhere句を使用するとエラーが発生する "Unsupported where clause:(Boolean)Operators.CompareObjectLess"

は、ここでは、コードです:

Dim update_for As UpdateBuilder 
Dim query_for As IMongoQuery 
Dim coll_for = db.GetCollection(Of MyClass)("collection_1") 
Dim queryMun = (From a In coll_for _ 
       Where (a.field_1 < 10000) _ 
       Select a) 

For Each emp In queryMun 
    query_for = Query.EQ("_id", emp.Id) 
    update_for = Update.Set("field_1", BsonValue.Create("0" + emp.field_1)) 
    coll.Update(query_for, update_for, opts) 
Next 

それはそれぞれの文のデを実行し、それは例外が発生します:サポートされていないwhere句:(ブール)Operators.CompareObjectLess(a.field_1、10000、真)。

私は間違っていますか?

ありがとうございました。

答えて

0

私は、属性自体の値に基づいてこの更新を行う方法を発見しました。私がしたいのは、属性値の先頭に「0」を追加することです(たとえば、field_1 = 4567の場合、field_1 = '04567'の更新後)。ここで

はコードです:

Dim update_for As UpdateBuilder 
Dim query_for As IMongoQuery 
Dim opts = New MongoUpdateOptions 
opts.Flags = UpdateFlags.Multi 
Dim coll_for = db.GetCollection(Of MyLINQClass)("collection_1") 

Dim queryMun2 As New QueryDocument 
Dim query_1 = Query.LT("field_1", MongoDB.Bson.BsonValue.Create(10000)) 
queryMun2.AddRange(query_1.ToBsonDocument) 

Dim queryMun = coll_for.Find(queryMun2) 

For Each emp In queryMun 
    query_for = Query.EQ("_id", emp.Id) 
    update_for = Update.Set("field_1", BsonValue.Create("0" + emp.FField_1.ToString)) 
    coll.Update(query_for, update_for, opts) 
Next 

そして、ここではMyLINQClassの定義です:

Public Class MyLINQClass 
    <BsonElementAttribute("_id")> _ 
    Public Property Id() As ObjectId 

    <BsonElementAttribute("field_1")> _ 
    Public Property FField_1() As Object 
End Class 
0

私はエラーがクリアされていると思う:

それはサポートされていないだからあなたはWHERE句で「<」より小さい演算子を使用することはできません。

+0

はあなたに@Oscarをありがとうございます。そして、私はどのようにしてより少ない比較をすることができますか?出来ますか? – Aliena

+0

@Aliena私はモンゴルの専門家ではありません。ドキュメントを読むべきです。しかし、 "<"演算子は別の構文でサポートされています。https://docs.mongodb.com/getting-started/csharp/query/#specify-conditions-with-operators – Oscar

+0

@Oscarありがとうございますが、これはMongoDBのために直接。私はVBネットでそれを実行する必要があります。私がMongoDBのウェブサイトで見つけたものはC#であり、<演算子を使用しています。私はQuery.EQ、Query.LTなどで単純なクエリを実行できますが、クエリ結果を繰り返し処理し、属性に値の前に "0"を追加してデータを更新する必要があります。これは固定値の更新ではなく、すでに属性に値が設定されています。 – Aliena

関連する問題