javascript 如何用新的编辑模式替换旧的模式?

ljo96ir5  于 2023-09-29  发布在  Java
关注(0)|答案(1)|浏览(120)

所以我有这样的模式:

{ user: '123', code: 'abc', uses: [...] },
{ user: '123', code: 'def', uses: [...] },

我想要这样

{ user: '123', code: ['abc', 'def'], uses: [...] },

我现在正在尝试

schema.aggregate([
    { $unwind: '$uses' },
    { $group: { _id: '$_id', user: { $first: '$user' }, code: { $addToSet: '$code' }, uses: { $addToSet: '$uses' } } }
  ]);

但我没有得到我想要的结果,它没有改变任何东西,除了现在code是一个数组但只有1个代码的事实。
基本上,我编辑了函数的工作方式,现在我需要code成为一个数组,因为我有超过400个文档,我试图编辑所有这些文档以适应新的函数,而不是手工完成。
编辑:好的,我想我让它工作,

{ $unwind: '$uses' },
{ $group: { _id: '$user', code: { $addToSet: '$code' }, uses: { $addToSet: '$uses' } } }

问题(我认为)是user: { $first: '$user' },因为现在w/o它就像我想要的那样工作。但现在问题又来了。如何用新的模式替换旧的模式?

rvpgvaaj

rvpgvaaj1#

这是最终的工作代码:

const invites = await schema.aggregate([
    { $unwind: '$uses' },
    { $group: { _id: '$user', code: { $addToSet: '$code' }, uses: { $addToSet: '$uses' } } }
]);

for (const invite of invites) {
    await schema.deleteMany(
      {
        user: invite._id
      }
    );
    
    await new schema(
      {
        user: invite._id,
        code: invite.code,
        uses: invite.uses
      }
    ).save();
};

正如我在上次编辑中所说的,问题是user: { $first: '$user' },但我真的不知道如何以及为什么。

相关问题