58

mongodb クエリで OR と AND の組み合わせを使用できますか?

以下のコードは期待どおりに動作しません

db.things.find({
           $and:[
                {$or:[
                     {"first_name" : "john"}, 
                     {"last_name" : "john"}
                ]},
                {"phone": "12345678"}
            ]});

データベースの内容:

> db.things.find();
{ "_id" : ObjectId("4fe8734ac27bc8be56947d60"), "first_name" : "john", "last_name" : "hersh", "phone" : "2222" }
{ "_id" : ObjectId("4fe8736dc27bc8be56947d61"), "first_name" : "john", "last_name" : "hersh", "phone" : "12345678" }
{ "_id" : ObjectId("4fe8737ec27bc8be56947d62"), "first_name" : "elton", "last_name" : "john", "phone" : "12345678" }
{ "_id" : ObjectId("4fe8738ac27bc8be56947d63"), "first_name" : "eltonush", "last_name" : "john", "phone" : "5555" }

上記のクエリをクエリすると、何も得られません!

> db.things.find({$and:[{$or:[{"first_name" : "john"}, {"last_name" : "john"}]},{"phone": "12345678"}]});
>

私はmongo 1.8.3を使用しています

4

4 に答える 4

13

$and は MongoDB v2.0 以降でのみサポートされていると思います。そもそもコンソールがその表現を受け入れたことに驚いています。私が持っている1.8サーバーに対して再作成しようとします。

10Gen の Advanced Query Documentation forも確認してください$and

アップデート

サンプル データを v1.8x と v2.0x の両方の MongoDB サーバーに入力しました。クエリは v2.0x で機能し、v1.8x では失敗します。$andこれは、問題がサーバーのバージョンにあるという私の (および Miikka の) 疑いを裏付けるものです。

私は Web でこれに対する (ほぼ間違いなく) 巧妙な回避策を見つけまし。これが役立つことを願っています。

-セト

于 2012-06-25T19:48:27.233 に答える