0

サブオブジェクトの配列を持つオブジェクトがあります。

    _id: "9",
        clients: [
            {
                id: 677,
                enabled: true,
                updated: 0,
                created: 1352416600
            },
            {
                id: 668,
                enabled: true,
                updated: 0,
                created: 1352416600
            }
        ],
        cloud: false,
        name: "love",
}

ユーザーがクライアントID677の画像をリクエストすると、上記のオブジェクトが返されます

ユーザーがクライアントID677および668の画像をリクエストすると、上の画像が返されます

ユーザーがクライアントID677、668、690の画像をリクエストしましたが、上記の画像は返されません

PHPとMongoDBを使用しています。これを強化するために使用されたMYSQLクエリは、COUNTおよびサブクエリを使用するために使用されていました。

モンゴでこれに取り組み始める場所すらわかりません。

助けていただければ幸いです。

4

3 に答える 3

2

配列内のドキュメントを検索するには、ドット表記と「$and」演算子を使用できます。

構文:

db.coll.find({"$and": [{"clients.id": <id1>}, {"clients.id": <id2>}, ... ]});

あなたのためのサンプル:

1)ユーザーがクライアントID 677の画像をリクエストします(1つのアイテムの場合、「$ and」は必要ありませんが、とにかく使用できます)。

db.coll.find({"clients.id": 677});

また

db.coll.find({"$and": [{"clients.id": 677}]});

2)ユーザーがクライアントID677および668の画像をリクエストします。

db.coll.find({"$and": [{"clients.id": 677}, {"clients.id": 668}]});

3)ユーザーがクライアントID 677、668、690の画像をリクエストします。

db.coll.find({"$and": [{"clients.id": 677}, {"clients.id": 668}, {"clients.id": 690}]});
于 2013-02-15T14:29:04.883 に答える
1

配列フィールドに各アイテムのリストが含まれているドキュメントを返したい場合は、$all演算子を使用できます。

したがって、3つのケースは次のように処理できます。

1)ユーザーがクライアントID677の画像をリクエストします。

db.coll.find({'clients.id': 677});

2)ユーザーがクライアントID677および668の画像をリクエストします。

db.coll.find({'clients.id': {$all: [677, 668]}});

3)ユーザーがクライアントID 677、668、および690の画像をリクエストします。

db.coll.find({'clients.id': {$all: [677, 668, 690]}});
于 2013-02-15T14:52:47.820 に答える
0

3番目の簡単な方法があります。

db.foo.find({"clients.id":{$ in:[677,688,690]}});

お役に立てれば

/ Nodex

編集:

正確な構造を一致させる必要がある場合は、$elemMatchを使用できます

于 2013-02-15T14:44:23.807 に答える