VB net& Mongo:在LINQ中使用where子句会导致错误“Unsupported where子句:( Boolean)Operators.CompareObjectLess”

时间:2017-01-23 14:25:27

标签: vb.net mongodb linq where

我在MongoDB中有一个集合,我在VB网络中使用MongoDB驱动程序。我想根据条件更新几个文档。 为此,我想使用LINQ,但选择会导致错误,我不知道如何解决它。

以下是代码:

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

当它执行de For Each句子时,它会引发异常: Unsupported where子句:(布尔值)Operators.CompareObjectLess(a.field_1,10000,true)。

我做错了什么?

非常感谢你的帮助。

2 个答案:

答案 0 :(得分:0)

我认为错误很明显:

您不能使用小于&#34;&lt;&#34;您在WHERE子句中的运算符,因为它不受支持。

答案 1 :(得分: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