更新所有文档-根据子集合中的订单设置子集合订单字段

时间:2019-12-12 17:25:17

标签: mongodb

老实说,我不知道该如何标记这个问题,因此提前致歉。如果有人有任何标签建议,我可以用来更好地修饰问题,请告诉我。

我有一个基本上像这样的文档集合(为简洁起见,删除了额外的字段。为清楚起见,子集合不是分层设置,而是在典型的数据库中考虑了一对多关系): / p>

{
    "_id" : "5d769cefbe793b0f0ce2768b",
    "SubCollection" : [ 
        {
            "_id" : "5d769ceebe793b0f0ce27627"
        }, 
        {
            "_id" : "5d769ceebe793b0f0ce2761d"
        }, 
        {
            "_id" : "5d769ceebe793b0f0ce2762f"
        }, 
        {
            "_id" : "5d769ceebe793b0f0ce27624"
        }
    ]
}

我需要更新文档以将它们转换为如下形式:

{
    "_id" : "5d769cefbe793b0f0ce2768b",
    "SubCollection" : [ 
        {
            "_id" : "5d769ceebe793b0f0ce27627",
            "Number" : 1
        }, 
        {
            "_id" : "5d769ceebe793b0f0ce2761d",
            "Number" : 2
        }, 
        {
            "_id" : "5d769ceebe793b0f0ce2762f",
            "Number" : 3
        }, 
        {
            "_id" : "5d769ceebe793b0f0ce27624",
            "Number" : 4
        }
    ]
}

我完全不知道如何在MongoDB中编写此更新查询。我知道在SQL Server中,我只需要更改代表子集合的表并添加一个自动递增的ID字段即可,但据我所知,这在MongoDB中是不可能的。如果我真的不能使用自动递增字段,那么在SQL Server中执行此操作的另一种方法是在该字段中添加内容,然后执行以下操作:

WITH cte AS
(
    SELECT Child.ID, ROW_NUMBER() OVER (PARTITION BY Parent.ID) AS rowNum
    FROM Child
    JOIN Parent on Parent.ID = Child.ParentID
)

UPDATE c
SET c.Number = rowNum
FROM Child c
JOIN cte ON cte.ID = Child.ID

MongoDB是否有任何类似的查询方法?

0 个答案:

没有答案