MongoDBでフィールドが存在することを確認する


131

したがって、フィールドセットがあり、nullではないすべてのレコードを検索しようとしています。

私はを使ってみ$existsましたが、MongoDBのドキュメントによればこのクエリはnullに等しいフィールドを返します。

$exists null値を格納するフィールドを含むドキュメントに一致します。

だから私は今私がこのようなことをしなければならないと仮定しています:

db.collection.find({ "fieldToCheck" : { $exists : true, $not : null } })

しかし、これを試すたびにエラーが発生します。[invalid use of $not] 誰でもこれを照会する方法を知っていますか?

回答:


184

使用$ne(「等しくない」の場合)

db.collection.find({ "fieldToCheck": { $exists: true, $ne: null } })

これは何を返しますか?nullコレクション?単一のアイテム?配列?
Oliver Dixon

4
@iLoveUnicorns:find常に返すもの:基準に一致するレコードのコレクション。
Sergio Tulentsev

2
@SergioTulentsev AFAIKカーソルを返します
fernandohur

@fernandohur:ええ、でもドキュメントが1ページに満たない場合、違いはわかりません。また、このクエリを外部ドライバーから実行する場合、それらのほとんどがカーソル実装の詳細からユーザーを保護すると確信しています。
Sergio Tulentsev、2016

24

以下のようなコレクションがあるとします。

{ 
  "_id":"1234"
  "open":"Yes"
  "things":{
             "paper":1234
             "bottle":"Available"
             "bottle_count":40
            } 
}

ボトルフィールドが存在するかどうかを知りたいですか?

回答:

db.products.find({"things.bottle":{"$exists":true}})

2
When <boolean> is true, $exists matches the documents that contain the field, including documents where the field value is null. ドキュメントから。
AlbertEngelB 2015

1
うん、でもDBに値nullが含まれる理由はわかりません。だらしない
Martijn Scheffer

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.