首页 > 解决方案 > mongodb 对其他字段进行分组和计数、匹配和更新

问题描述

我有以下字段

mongodb 中的 e_id、c_id、m_id 必须与 id 传递参数匹配。

data -> 是多个 event_id、coor_id、manage_id

  {
        "_id" : "1",
        "event_id" : "abscdsadsad890",
        "coor_id" : "cdaddsadewqwae889",
        "manage_id" : "fdfdfsdfdsfsdf908",
        "active" : true
        "date" : ISODate("2014-01-14T00:00:00Z"),
    }

     {
        "_id" : "1",
        "event_id" : "abscdsadsad890",
        "coor_id" : "cdaddsadewqwae889",
        "manage_id" : "fdfdfsdfdsfsdf908",
        "active" : true
        "date" : ISODate("2014-01-14T00:00:00Z"),
    }

 {
        "_id" : "1",
        "event_id" : "abscdsadsad890",
        "coor_id" : "cdaddsadewqwae889",
        "manage_id" : "fdfdfsdfdsfsdf908",
        "active" : true
        "date" : ISODate("2014-01-14T00:00:00Z"),
    }

预期结果 :

  {
            "_id" : "1",
            "event_id" : "abscdsadsad890",
            "coor_id" : "cdaddsadewqwae889",
            "manage_id" : "fdfdfsdfdsfsdf908",
            "active" : true
            "date" : ISODate("2014-01-14T00:00:00Z"),
        }

         {
            "_id" : "1",
            "event_id" : "abscdsadsad890",
            "coor_id" : "cdaddsadewqwae889",
            "manage_id" : "fdfdfsdfdsfsdf908",
            "active" : false
            "date" : ISODate("2014-01-14T00:00:00Z"),
        }

     {
            "_id" : "1",
            "event_id" : "abscdsadsad890",
            "coor_id" : "cdaddsadewqwae889",
            "manage_id" : "fdfdfsdfdsfsdf908",
            "active" : false
            "date" : ISODate("2014-01-14T00:00:00Z"),
        }

预期结果应该使非最新记录处于活动状态 false 并且最新记录必须处于活动状态每个创建的新记录新记录应该处于活动状态 = true 并且其他相同的 event_id、coor_id 和 manage_id 必须处于活动状态 = false

我正在尝试使用匹配所有结果,然后分组和计数,然后如果计数大于 1,则获取最新的文档找到结果并更新其余匹配结果,但在 mongodb 中我也想写。有什么建议吗?

标签: mongodbaggregation-framework

解决方案


我设法通过c#做到了

首先是我在 create 中传递了 event_id、coor_id 和 manage_id。然后使用我做的c#mongodb驱动程序是

var list = await collection.AsQueryable().Where(x => c.id == c.id && m.id == m.id).toList();

然后循环并通过_id检查第一个不能等于其他

然后更新除第一个列表之外的其他列表。

完成...谢谢


推荐阅读