Mongodb 更新文档中的嵌套字段(如果存在),或创建(如果不存在)

Mongodb 更新文档中的嵌套字段(如果存在),或创建(如果不存在),mongodb,Mongodb,我将mongoDB与mongoDB客户端一起使用。在我的graphql变异中,我调用此方法将名人添加到给定首字母的用户 export const save_famous_person_initials_association_for_given_user = async ( famous_person_id: string, _initials: string, username: string ) => { await find_famous_person_by_id(f

我将mongoDB与mongoDB客户端一起使用。在我的graphql变异中,我调用此方法将
名人
添加到给定首字母的
用户

export const save_famous_person_initials_association_for_given_user = async (
  famous_person_id: string,
  _initials: string,
  username: string
) => {
  await find_famous_person_by_id(famous_person_id).then(document => {
    return users_collection.findOneAndUpdate(
      {username: username},
      {
        $addToSet: {
          my_associations: {
            initials: _initials,
            famous_person_id: document._id,
          },
        },
      }
    );
  });
};
名人id
指另一个mongodb文档id。 这就是结果:

{"_id":{"$oid":"5f5bc12d39f5f60b0c56a1da"},"username":"abc","email":"a@b.c","password":"pwd","my_associations":[{"initials":"OO","famous_person_id":{"$oid":"5f5b957a7fdba127dc1020e1"}},{"initials":"AO","famous_person_id":{"$oid":"5f5b957a7fdba127dc1020df"}},{"initials":"AO","famous_person_id":{"$oid":"5f5b957a7fdba127dc1020e0"}}]}
我需要做的是:当我用一个现有的
首字母缩写
字段添加另一个
名人id
时,我希望现有的
名人id
替换为新的
首字母缩写
字段

为了清楚起见,my
user
对象仅使用以下字段初始化:

{"_id":{"$oid":"5f5bc12d39f5f60b0c56a1da"},"username":"abc","email":"a@b.c","password":"pwd"}
然后,一旦我开始添加对象,比如
{“缩写”:“OO”,“名人”\u id:{“$oid”:“5f5b957a7fdba127dc1020e1”}
,我就想创建这样的结构。(如果它使事情变得简单,我可以用一个空的
my_关联数组
字段初始化我的用户对象)

重要的是,每个姓名首字母只有一个
姓名首字母
字段,如果已经有了
名人id
,则替换该字段