2017-04-15 1 views
0

配列に同じキーを持つ別のオブジェクトが含まれていない場合にのみ、オブジェクトの配列プロパティにオブジェクトを挿入しようとしています。しかし、私はC#ドライバを使用してこれを行う正しいフィルタを見つけることができませんでした。詳細は次のとおりです。フィルタの作成を手伝ってもらえますか?ここでMongoDB C#Driverを使用して、複雑な配列オブジェクトを挿入する方法

は、ここに私のモデル

public class Document : Entity 
{ 
    public string Id { get; set; } 
    public string Name { get; set; } 
    public List<DocumentSubject> Subjects { get; set; } 
    ... 
} 


public class DocumentSubject 
{ 
    public string Id { get; set; } 
    public DocumentSubjectType Type { get; set; } 
    public bool CanOpenIssue { get; set; } 
    ... 
} 

ている私は、これまで(もちろん、それが完了していない)

var filter = Filter.And(
       Filter.Eq(x => x.Id, id), 
       "PUT SOME FILTER FOR ARRAY ITEM EXISTENCE CHECK BY ID" 
      ); 


var updater = Updater.AddToSet(x => x.Subjects, subject); 

var u =Collection.UpdateOne(filter, updater); 

答えて

0

あなたは、クエリの下に試すことができなかったものです。

以下のクエリでは、idの要素に対してDocumentSubjectの配列をチェックするために$elemMatchを使用します。

var queryBuilder = Builders<Document>.Filter; 
var elemMatchBuilder = Builders<DocumentSubject>.Filter; 
var filter = queryBuilder.Eq(document => document.Id, id) & queryBuilder.ElemMatch(document => document.Subjects, elemMatchBuilder.Ne(document => document.Id, subjectId)); 

var updater = Updater.Push(x => x.Subjects, subject); 

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