2016-12-13 7 views
-1

タイプ'null'または'objectid'のフィールドがthe $type operatorのフィールドと一致するクエリを作成しようとしています。私はちょうどある特定のタイプのクエリを実行すると、それが動作します:フィールドがnullまたは特定のタイプのクエリ

> db.collections.post.findOne({$or: [{x: {$type: 'null'}}]}).then(console.log) 
Promise { <pending> } 
> { _id: 584f573f931f2b0bf4e3d339, 
    date: Mon Dec 12 2016 21:04:47 GMT-0500 (Eastern Standard Time), 
    title: 'hgfgh', 
    text: 'dhffgh', 
    userId: 584f573a931f2b0bf4e3d338, 
    x: null } 

私もobjectidxにマッチするクエリを書くとき、私は戻って何を取得:

> db.collections.post.findOne({$or: [{x: {$type: 'null'}}, {x: {$type: 'objectid'}}]}).then(console.log) 
Promise { <pending> } 

私はリンパ節転移使用していますmongodb-native-2.2。

フィールドがnullまたはObjectIdのいずれかの場合に一致するクエリを作成するにはどうすればよいですか?

+3

あなたは{$ or:{x:{$ type: 'null'}}、{x:{$ type: 'objectId'}}}}オブジェクトIDの大文字Iを使用できますか? – Veeram

+0

それはそれでした。これは私が愚かなxDを感じさせる。 mongoの質問は、これをエラーのように扱い、例外を発生させないことを非難したいと思っています。 – binki

答えて

0

私が使用していたアプローチは明らかに正しいです。ちょうど'objectId'“Available Types”参照)を'objectid'と誤植しました。型名のスペルが正しく行われたため、mongodbはフィールドマッチングではなくクエリとしてクエリを解釈することにしました。

私に起こったことの私の理論は、mongodbが "クエリ"として私のクエリを強制するのをやめ、代わりにオブジェクトキーマッチングのように扱ったということでした。私はこれを回避する方法や、mongodbがクエリを解釈する方法を静かに変更する代わりに$typeを解釈できないときにエラーを発生させる方法があるかどうかはわかりません。

EDIT:ああ、私もmongodb だったと分かりましたが、私の構文が悪いと教えてくれました。私はちょうど私のPromise.catch()を入れていませんでした。 Oops ...

関連する問題