简体   繁体   English

从 mongodb 中的数组中删除一个元素

[英]Delete an element from an array in mongodb

Suppose I have an object in mongoDB:假设我在 mongoDB 中有一个 object:

collection_name: book_info

{_id:"121as", "book_num":"12a", "book_name":"lotr", "info":[ {"borrowerAddress":["NY","Delhi"] }, 
{"borrowerAddress":["SI","Ghana"] } ] }

I want to delete an element "NY" from info.我想从信息中删除一个元素“NY”。

For this I can do is fetch the object from book_info collection and apply loop and delete when element found inside array and save the data into db.为此,我可以做的是从book_info集合中获取 object 并应用循环并在数组中找到元素时删除并将数据保存到数据库中。

But I want to do is delete and update at same time without fetching data and looping and updating again.但我想做的是同时删除和更新,而无需获取数据并再次循环和更新。

Also, if direct db manipulation is possible, can anyone suggest me whether fetching data, applying loop and deleting data is efficient or deleting data from db directly is more faster, based on solutions provided.此外,如果可以直接进行数据库操作,根据提供的解决方案,任何人都可以建议我获取数据、应用循环和删除数据是有效的还是直接从数据库中删除数据更快。

If anyone needs any further information, please let me know.如果有人需要任何进一步的信息,请告诉我。

Additional Question:附加问题:

doc1: {_id:"121as", "book_num":"12a", "book_name":"lotr", "info":[ {"borrowerAddress":["NY","Delhi"] }, 
{"borrowerAddress":["SI","Ghana"] } ] }

doc2: {_id:"213s", "book_num":"1c", "book_name":"hp", "info":[ {"borrowerAddress":["NY","Delhi"] }, 
{"borrowerAddress":["SI","Ghana"] } ] }

Assume I have multiple documents inside a book_info collection with different book names and details and I want to delete document for "book_name":"lotr" only, I delete address "NY" from document.假设我在book_info集合中有多个文档,其中包含不同的书名和详细信息,并且我只想删除"book_name":"lotr"的文档,我从文档中删除地址 "NY"。

You can try update query with $pull operator to remove matching element from array, $[] positional for all elements in info array,您可以尝试使用$pull运算符更新查询以从数组中删除匹配元素, $[]位置为 info 数组中的所有元素,

db.collection.update(
  { "info.borrowerAddress": "NY" },
  { $pull: { "info.$[].borrowerAddress": "NY" },
  { multi: true }
})

Playground操场


Assume I have multiple documents inside a book_info collection with different book names and details and I want to delete document for "book_name":"lotr" only, I delete address "NY" from document.假设我在 book_info 集合中有多个文档,其中包含不同的书名和详细信息,并且我只想删除 "book_name":"lotr" 的文档,我从文档中删除地址 "NY"。

db.collection.update(
  { "book_name":"lotr", "info.borrowerAddress": "NY" },
  { $pull: { "info.$[].borrowerAddress": "NY" },
  { multi: true }
})

Playground操场

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM