【问题标题】:How to insert complex array object if not exists using MongoDB C# Driver如果使用 MongoDB C# 驱动程序不存在,如何插入复杂的数组对象
【发布时间】:2017-04-15 05:23:43
【问题描述】:

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

【问题讨论】:

    标签: c# mongodb mongodb-query mongodb-.net-driver


    【解决方案1】:

    你可以试试下面的查询。

    下面的查询将使用$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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-09
      • 2020-07-09
      • 2020-09-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-20
      相关资源
      最近更新 更多