对不起,如果这很简单,但是我是mongodb新手,还没有找到答案:
假设我正在执行以下操作:
db.collection("bugs").updateOne({ _id: searchId }, { $set: { "fixed": true }}
如何将“固定”设置为与“固定”的最后一个值相反?没有任何其他查询?像{ $set: { "fixed": !fixed }}
答案 0 :(得分:4)
到目前为止,通过坚持存储布尔值的想法(在将来的MongoDB版本中可能),仅凭一个操作实际上就不可能在MongoDB中实现此目标。但是,有一种解决方法,可以通过存储代表真或假的位(0或1)而不是布尔值,并对MongoDB中的位执行按位异或运算,如下所示:
db.collection("bugs").updateOne(
{
_id: searchId
},
{
$bit : {
fixed: {
xor: NumberInt(1)
}
}
}
)
请注意,您还必须将 0 存储为NumberInt(0)
来表示false
,将 1 存储为NumberInt(1)
来表示{默认情况下,固定道具中的{1}}作为MongoDB会将所有数字视为浮点值。
答案 1 :(得分:2)
这在MongoDB中是不可能的。您必须从数据库中检索文档,然后对其进行更新:
var doc = db.collection("bugs").findOne({ _id: searchId });
db.collection("bugs").updateOne({ _id: searchId }, { $set: { "fixed": !doc.fixed } }
答案 2 :(得分:0)
是的,当然可以用 MongoDB 做到这一点!! ...只需像这样使用 find 的 forEach 功能:
db.collection("bugs").find({ _id: searchId }).forEach(function(bugDoc) {
db.collection("bugs").updateOne({ _id: searchId }, { $set: { "fixed": !bugDoc.fixed }});
});
注意:bugDoc 包含原始文档的所有字段,您可以在此双操作更新中进行您想要的所有计算和更改