如何插入复杂的数组对象,如果不存在使用MongoDB C#驱动程序

问题描述:

我想插入一个对象到我的文档的数组属性只有当数组不包含另一个对象具有相同的键。但是我找不到使用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); 

你可以试试下面的查询。

以下查询将使用$elemMatch检查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);