1. ホーム
  2. mongodb

[解決済み] boolean フィールドを "not true" (例: false または non existent) としてクエリする。

2023-03-24 12:01:27

質問

MongoDBのクエリで何か非常に基本的なことを見逃していると思うのですが、この単純な条件を得ることができないようです。

このコレクションを考えてみましょう。

> db.tests.find()
{ "_id" : ObjectId("..."), "name" : "Test1" , "deleted" : true}
{ "_id" : ObjectId("..."), "name" : "Test2" , "deleted" : false}
{ "_id" : ObjectId("..."), "name" : "Test3" }

私は単に"not deleted"であるすべての項目を照会したいと思います。

私は、"deleted"フラグがtrueに設定されているアイテムを見つける方法を知っています。

> db.tests.find({deleted:true})
{ "_id" : ObjectId("..."), "name" : "Test1" , "deleted" : true}

しかし、どのようにすれば "deleted" を持たない項目 (例えば、上記のクエリを否定する、言い換えれば、すべての項目が "deleted" フィールドを持たないか、あるいは値 false

推測でやってみたこと (笑わないでください...)

> db.tests.find({$not : {deleted: true}})

(結果を返さない)

> db.tests.find({$not : {$eq:{deleted:true}}})

エラーが発生しました。{ "$err" : "無効な演算子: $eq", "code" : 10068 }.

> db.tests.find({deleted:{$not: true}})

エラーが発生しました。{ "$err" : "無効な$notの使用", "code" : 13041 }.

> db.tests.find({deleted:{$not: {$eq:true}}})

エラーが発生しました。{ "$err" : "無効な$notの使用", "code" : 13034 }.

何が足りないのでしょうか?

どのように解決するのですか?

db.tests.find({deleted: {$ne: true}})

ここで $ne はquot;not equal"を表します。 ( mongodbの演算子に関するドキュメント )