0

私は単純なメッセージングシステムを構築しており、mongodbに次のようなドキュメントのコレクションがあります。

{ "_id" : ObjectId("50ad003f9811e5bc5c000000"), "between" : [ "user1,user2,user3" ] }

このクエリを実行したい:

db.conversations.find({'between': ["user1,user2,user3"]});

この正確なドキュメントを取り戻すため。このクエリはmongoシェルで機能します。

php-mongoで、私はこれを試しました:

$collection->find(array("between"=>array("user1", "user2", "user3")));

しかし、それは機能しません。

私は何が間違っているのですか?

4

4 に答える 4

1

まず、データを保存するときは、文字列ではなく配列を使用する必要があります

{ "between" : [ "user1,user2,user3" ] }

これは、1つの要素の配列を「間」に格納します"user1,user2,user3"

基本的に、シェルでクエリを実行すると、1 つの要素を持つ配列を要求しているため、すべて問題ありません。しかし、php では、3 つの要素の配列を要求しています。

したがって、データを保存するときは、おそらくそれが必要です。

{ "between" : [ "user1","user2","user3" ] } 

これにより、3 人のユーザーの配列が得られます。

次に、ドキュメントhttp://www.mongodb.org/display/DOCS/Advanced+Queriesを読み、必要なものに応じてクエリを調整します: 正確な配列または配列内の一部の要素のみ

于 2012-11-22T02:36:10.550 に答える
1

ここで In クエリを実行しませんか?

db.collection.find( { "between" : { $in : ["user1", "user2", "user3"] } } );

In query here を参照してください: Mongo Advanced $in query

PHP クエリを次のようにします。

$collection->find(array("between"=>array("$in"=>array("user1", "user2", "user3"))));
//untested, should be something similar to this.

または、それを正確に見つけようとしている場合は、次のことはできません。

$collection->find(array("between"=>array("user1,user2,user3")));
于 2012-11-21T18:27:40.790 に答える
0

やってみました:

$collection->find(array("between"=>"user1,user2,user3"));

また

$collection->find(array( "$elemMatch" => array( "between"=>"user1,user2,user3" ));
于 2012-11-21T20:07:27.673 に答える
0

この$in演算子は SQLIN修飾子に似ており、可能な一致の配列を指定できます。

$or演算子を使用する次の例を考えてみましょう。

$collection->find([
    'select' => ['$in' => ['option 1', 'option 2', 'option 3']]
]);

参考文献

于 2012-12-13T04:23:11.703 に答える