Mongodb:如果不存在如何插入


仅当文档尚不存在时,才可以使用以下语法将文档插入到 MongoDB 中的集合中:

 db.teams.update(
	{
	  team: 'Hornets'
	}, 
	 {
	  $setOnInsert : {team: 'Hornets', points: '58', rebounds: '20'}
	 },
	 {upsert: true }
)

此特定代码检查“team”字段的值是否为“Hornets”。如果这个值存在,那么什么都不会发生。

但是,如果该值不存在,那么它将插入一个包含“team”、“points”和“rebounds”字段的特定值的文档。

以下示例展示了如何在实践中使用此语法。

示例:如果 MongoDB 中不存在则插入

假设我们有一个名为team的集合,其中包含以下文档:

 db.teams.insertOne({team: " Mavs ", points: 30, rebounds: 8})
db.teams.insertOne({team: " Spurs ", points: 35, rebounds: 12})
db.teams.insertOne({team: " Rockets ", points: 20, rebounds: 7})
db.teams.insertOne({team: " Warriors ", points: 25, rebounds: 5})
db.teams.insertOne({team: " Cavs ", points: 23, rebounds: 9})

假设我们使用以下代码尝试为“Mavs”团队插入文档:

 db.teams.update(
	{
	  team: 'Mavs'
	}, 
	 {
	  $setOnInsert : {team: 'Mavs', points: '58', rebounds: '20'}
	 },
	 {upsert: true }
)

“team”字段已经包含“Mavs”的信息,任何文档都不会被修改。

然而,假设我们使用以下代码为“黄蜂”队插入一个文档:

 db.teams.update(
	{
	  team: 'Hornets'
	}, 
	 {
	  $setOnInsert : {team: 'Hornets', points: '58', rebounds: '20'}
	 },
	 {upsert: true }
)

由于“team”字段尚未包含“Hornets”的信息,因此将使用我们为每个字段指定的值将新文档添加到集合中。

更新后的集合如下所示:

 { _id: ObjectId("6203df361e95a9885e1e764a"),
  team: 'Mavs',
  points: 30,
  rebounds: 8 }
{ _id: ObjectId("6203df361e95a9885e1e764b"),
  team: 'Spurs',
  points: 35,
  rebounds: 12 }
{ _id: ObjectId("6203df361e95a9885e1e764c"),
  team: 'Rockets',
  points: 20,
  rebounds: 7 }
{ _id: ObjectId("6203df361e95a9885e1e764d"),
  team: 'Warriors',
  points: 25,
  rebounds: 5 }
{ _id: ObjectId("6203df361e95a9885e1e764e"),
  team: 'Cavs',
  points: 23,
  rebounds: 9 }
{ _id: ObjectId("6203e17de42bfba74fc73325"),
  team: 'Hornets',
  dots: '58',
  rebounds: '20' }

请注意,为“黄蜂”队添加了一个新文档。

注意:您可以在此处找到$upsert函数的完整文档。

其他资源

以下教程解释了如何在 MongoDB 中执行其他常见操作:

MongoDB:如何添加新字段
MongoDB:如何删除字段
MongoDB:如何计算字段中的不同值

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注