javascript - MongoDB:用反值更新字段编号?

标签 javascript mysql mongodb

我的情况是:我在 Users 集合中有一个文档,例如:

Users : {
  _id : "id_str",
  active : 1
}

我想用只有一个查询更新这个用户的active状态,比如:

Users.update({
    _id : "id_str"
}, {
   $set : {
      active : 0 if active now is 1, 1 if active now is 0
   }
})

我不是在寻找任何找到 user document 以获得 active 状态然后更新它的解决方案。我只想使用 1 个查询来解决这个问题

在MySQL中,我经常只用一条SQL解决这个问题:

更新用户 SET active = ABS(active - 1) WHERE...

但我不知道如何在 MongoDB 中做到这一点。请帮我。 提前致谢

最佳答案

您可以使用 $bit 执行此操作和 xor 运算符,但您需要确保您的值是整数,而不是 shell 中默认值的两倍。

因此,如果您将文档创建为:

db.users.insert([{
  _id : "id_str1",
  active : NumberInt(0)
},{
  _id : "id_str2",
  active : NumberInt(1)
}])

您可以使用以下方式切换它们的 active 值:

db.users.update({}, {$bit: {active: {xor: NumberInt(1)}}}, {multi: true})

关于javascript - MongoDB:用反值更新字段编号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35643324/

相关文章:

node.js - Mocha MongoDB Mongoose ObjectId 引用在第一个 'it' 语句后消失

node.js - 将新的 Mongoose 中间件前提条件应用于集合中所有现有的元素

javascript - 使用 Mongoose 将非常大的 CSV 保存到 mongoDB

javascript - 在 Javascript 中迭代分页 API 结果

mysql - MariaDB/MySQL 选择查询将 id 的 json 数组替换为连接值

php - 高效重复访问第三方网站

PHP - 循环两列,一次一列

javascript - Mapbox: map 外部的标记导航链接

javascript - 如何在 jQuery 中更改相邻 td 的数据属性?

javascript - Javascript事件触发顺序错误?