Vb.net VB net和Mongo:将where子句与LINQ一起使用会导致错误“不支持where子句:(布尔)运算符。CompareObjectLess”

Vb.net VB net和Mongo:将where子句与LINQ一起使用会导致错误“不支持where子句:(布尔)运算符。CompareObjectLess”,vb.net,mongodb,linq,where,Vb.net,Mongodb,Linq,Where,我在MongoDB中有一个集合,我在VB net中使用MongoDB驱动程序。我想根据条件更新几个文档。 为此,我想使用LINQ,但select会导致错误,我不知道如何修复它 代码如下: 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

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

代码如下:

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
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
当它对每个句子执行de时,会引发异常:Unsupported where子句:booleanporters.CompareObjectLessa.field_1,10000,true

我做错了什么


非常感谢您的帮助。

我认为错误很明显:


您不能使用小于的属性。我已经找到了一种基于属性本身的值进行更新的方法。我要做的是在属性值的开头添加一个0,例如,如果字段_1=4567,则在更新字段_1='04567'之后

代码如下:

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
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

谢谢你,奥斯卡。我怎样才能做比较少?可能吗?@Aliena我不是mongo专家,你应该看看医生。不过,谢谢你@Oscar,但这是直接给MongoDB的。我需要在VB网络中运行它。我在MongoDB网站上找到的是C语言,它使用<操作符。我可以使用Query.EQ、Query.LT等进行简单查询,但我需要迭代查询结果,然后在属性的值前面添加一个0来更新数据。它不是具有固定值的更新,而是针对属性中已存在的值进行的条件更新。