2017-04-15 3 views
0

배열에 동일한 키가있는 다른 객체가없는 경우에만 객체를 객체의 배열 속성에 삽입하려고합니다. 그러나 C# 드라이버를 사용하여 올바른 필터를 찾을 수 없습니다. 세부 사항은 아래와 같습니다. 필터를 만들 수 있도록 도와 주시겠습니까? 여기 MongoDB C# 드라이버를 사용하여 복잡한 배열 객체를 삽입하는 방법

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

당신은 쿼리 아래에 시도 할 수 있습니다 지금까지 무엇을했는지 내 모델입니다.

아래의 쿼리는 을 사용하여 DocumentSubject 요소의 배열을 id으로 확인합니다.

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