如何在 MongoDB 数组中更新和插入新元素

Sto*_*one 4 mongodb

我是 MongoDB 新手。我想将用户数据存储在数组中。数据是单个唯一的文档。可以说文档是这样的。

User { id: number, name: string }
Run Code Online (Sandbox Code Playgroud)
{
  _id : 001,
  room: User[],
}
Run Code Online (Sandbox Code Playgroud)

我想做一些这样的事情...

  • room[]如果没有则推送元素(用户) 。
  • 更新用户数据。

upsert就像更新操作中有选项一样。

  DB.Collection.updateOne(
      { _id: "001" },
      { $set: { name: "Bar" } },
      { upsert: true }
    );
Run Code Online (Sandbox Code Playgroud)

我怎样才能在文档数组中做这样的事情?

Nur*_*Nur 5

您可以使用$set操作来更新嵌入文档$(update)$[$[<identifier>]。但是它不能很好地工作upsert所以为了插入新文档使用$push。做一些单独更新数据或追加数据的操作。

// push element (User) if room[] doesn't have it.

DB.Collection.updateOne(
    { "room.id": { $ne: "001" } },
    { $push: { "room": { id: "001", name: "Bar" } } },
);

// update User data

DB.Collection.updateOne(
    { "room.id": "001"  },
    { $set { "room.$": { id: "001", name: "Foo" } } },
);


Run Code Online (Sandbox Code Playgroud)