Vb.net VB net和Mongo:将where子句与LINQ一起使用会导致错误“不支持where子句:(布尔)运算符。CompareObjectLess”
我在MongoDB中有一个集合,我在VB net中使用MongoDB驱动程序。我想根据条件更新几个文档。 为此,我想使用LINQ,但select会导致错误,我不知道如何修复它 代码如下: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
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来更新数据。它不是具有固定值的更新,而是针对属性中已存在的值进行的条件更新。