2017-02-22 10 views
3

ドキュメントの配列サブドキュメントから1つの要素のフィールドを更新する必要があります。

MongoDBには$ポジション演算子があります。しかし、MongoDB C#ドライババージョン2では、この演算子のサポートがないようです。

どうすればこの問題を解決できますか?

ドキュメント:

{ "_id" : 1, "grades" : [ 80, 85, 90 ] } 
{ "_id" : 2, "grades" : [ 88, 90, 92 ] } 
{ "_id" : 3, "grades" : [ 85, 100, 90 ] } 

予想されるクエリ:

db.students.update(
    { _id: 1, grades: 80 }, 
    { $set: { "grades.$" : 82 } } 
    ) 

答えて

4

あなたはこのような何かを試すことができます。

var builder = Builders<Student>.Filter; 
var filter = builder.Eq(student=> student.Id, 1) & builder.ElemMatch(student => student.Grades, x => x == 80); 

var builder = Builders<Student>.Update; 
var update = builder.Set(student => student.Grades[-1], 82); 

var result = collection.UpdateOne(filter, update); 
関連する問題