我在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)。
我做错了什么?
非常感谢你的帮助。
答案 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