node.js - 按值删除数组中的元素 | MongoDB | 节点JS
问题描述
我有一个名为 users 的集合的 mongoDB。每个元素都有一个 usrName、UserID、token,然后是 3 个数组,它们是朋友、传入和传出(所有这些都与“朋友”相关)。我正在寻找类似的东西:
db.collection('users').find({user:"some userID"}).update
或类似的东西。
我希望搜索正确的元素(按 id),然后按值从“传入”数组中删除一些元素。(它是一个字符串数组)
解决方案
更新看起来像这样:
db.collection('users').updateOne({user: "some userID"}, {$pull: { incoming: "removeThisValue" }})
$pull
接受一个对象,该对象描述您从中提取的数组字段以及您用于删除它的条件。既然你说它是一个字符串数组,你就会寻找平等。但请注意,如果使用不同的值,您也可以使用 mongodb 运算符,例如$gte
,和其他运算符。$lt
如果您一次从数组中删除多个值:
db.collection('users').updateOne({user: "some userID"}, {$pull: { incoming: { $in: ["removeMe", "removeMeToo"] } }})
同样值得注意的是,如果您曾经拥有一组文档,您也可以针对特定的键/值。假设用户有一系列爱好,其中每个爱好都有“title”和“timePerWeek”键。我们可以删除标题为“游戏”的爱好,如下所示:
db.collection('users').updateOne({user: "some userID"}, {$pull: { hobbies: {title: "Gaming"} }})
推荐阅读
- c - 相同的 C 程序但不同的执行时间
- ios - XCode 调试器不会显示所有变量内容。它是一个错误吗?
- postgresql - 在更新我们读取的行时从 Postgres 只读副本进行缓慢的批量读取
- sql-server - 将动态xml导入sql server
- azure - 用于使用证书指纹登录的 Microsoft Azure Graph API
- sql - 如何使用存储过程删除其他表引用的行?
- sqlite - SQLite pragma (journal_mode) 语句持久化
- javascript - Angular 添加 PWA 导致 Angular Ivy 出现问题
- java - equals() 和 hashCode() 应该返回相同的结果吗?
- ruby - 如何计算红宝石的相对时间?