1

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

    {
    "id": "510aec8e8426e96c156a0946",  
    "name": "ABC",
    "categoryToShardMap": null
    },
    {
    "id": "510aecd284268e0f60e547a5",
    "name": "XYZ",
    "categoryToShardMap": {
    "shoes": 1
    },
    {
    "id": "510aecbd84268e0f60e547a4",
    "name": "AAA",
    "categoryToShardMap": {
     "shoes": 3,
     "jeans": 2
     }

フィールド「categoryToShardMap」を次のように宣言した場所:

    private HashMap<String, Long> categoryToShardMap;

誰かが shardId を提供した場合、それを含む mongo ドキュメントを取得する必要がある REST Api を作成しようとしています。例: shardId = 3 を渡すと、mongo ドキュメントを受け取る必要があります。

    {
    "id": "510aecbd84268e0f60e547a4",
    "name": "AAA",
    "categoryToShardMap": {
    "shoes": 3,
    "jeans": 2
    }

これを行うためにJavaを使用しようとしています。しかし、mongotemplate または DBObject を使用してこれを照会する方法がわかりません。mongoドキュメントに保存されているマップに指定された値が含まれているかどうかを照会する方法について、誰かが私にいくつかの例を指摘できますか?

4

1 に答える 1

0

$neこれはオペレーターによって行うことができます。フィールドが null でないかどうかを確認するだけです。

javadriver を使用してこれを実現する方法の例を次に示します。

new BasicDBObject("categoryToShardMap", new BasicDBObject("$ne", null));

または、$where 演算子を使用して配列の長さを確認することもできます。これについては、次の投稿で説明しています。

配列サイズが 1 より大きいドキュメントのクエリ

マップ内の特定の値を探している場合は、次のコマンドを使用できます。

DBObject query = BasicDBObjectBuilder.start().add("categoryToShardMap.shoes", 3).get(); // query for getting the documents whose "categoryToShardMap" field contains shoes with value 3
于 2013-02-04T10:07:31.200 に答える