2

次のようなユーザー コレクションがあります。

{
    {
        _id: ObjectId(...),
        services: {facebook: {id: 1}}
    },
    {
        _id: ObjectId(...),
        services: {facebook: {id: 2}}
    },
    ...
}

さらに、次の JavaScript 配列があります。

[
    {name: "Alice", id: 1},
    {name: "Bob", id: 3},
    ...
]

ID が配列に存在するすべてのユーザーを検索したいのですが、JavaScript 配列に「到達」する方法が見つかりませんでした。

4

2 に答える 2

1

関数を使用してソース配列から値array.mapを引き出し、次のように演算子でそれらを使用できます。id$infind

var arr = [
    {name: "Alice", id: 1},
    {name: "Bob", id: 3},
    ...
];

db.users.find({'services.facebook.id': {$in: arr.map(function(e) {return e.id;})}});
于 2013-01-25T13:58:51.367 に答える
0

まず、JavaScript 配列を生の ID のみを含む配列に変換します。

var yourArray = [ 1, 3 ];

次に、このクエリを試してください

db.yourCollection.find({ services.facebook.id : { $in : yourArray } });

残念ながら、データベースがローカル配列 (名前フィールド) からの情報をデータベースから返されたデータと結合できるようにする良い方法はありません。したがって、これは自分で行う必要があります。返されたドキュメントに対して for ループを実行し、配列内の services.facebook.id フィールドを検索して実際の名前を見つけます。

ところで、 SQL データベースで行うこととは反対に、MongoDB では通常、人工的な外部キー (または一般的な外部キー) を避ける必要があります。MongoDB は、リレーショナル データベースほど参照を適切に処理するように構築されていないためです。多くの場合、データを別のドキュメントとして参照するのではなく、ドキュメントに埋め込むことをお勧めします。「すべてのデータを正規化する必要がある」という定説は、リレーショナル データベースに適用されるほど MongoDB のようなドキュメント データベースには適用されません。

于 2013-01-25T09:57:18.017 に答える