0

データ:

[{        
                    "shop_ID" : "ABCD",
                    "plan" : 2,
                    "planType" : 2,
                    "goods_id" : "9612",
                    "category" : "1",
                    "keywords" : [
                        {
                            "keyword" : "lianyiqun",
                            "price" : 3.12,
                            "score" : 9
                        },
                        {
                            "keyword" : "nvzhuang",
                            "price" : 6.57,
                            "score" : 6
                        },
                        {
                            "keyword" : "chunzhuang",
                            "price" : 5.55,
                            "score" : 8
                        }
                    ]
                },
                {
                    "shop_ID" : "ABCD",
                    "plan" : 2,
                    "planType" : 2,
                    "goods_id" : "5078",
                    "category" : "1",
                    "keywords" : [
                        {
                            "keyword" : "lianyiqun",
                            "price" : 9.26,
                            "score" : 8
                        },
                        {
                            "keyword" : "nvzhuang",
                            "price" : 4.52,
                            "score" : 9
                        }
                    ]
                }]

コマンドクエリを使用しました:

db.test.find({"キーワード" : { $elemMatch: {"スコア":{"$gte":8}} } })

結果は正しくありませんでした。すべてのドキュメントです。

そして、コマンド db.test.find({"keywords."score":{"$gte":8}}) を使用します

結果は同じです。

最初のドキュメントに対して次のようなクエリ結果が必要です。

{        
                        "shop_ID" : "ABCD",
                        "plan" : 2,
                        "planType" : 2,
                        "goods_id" : "9612",
                        "category" : "1",
                        "keywords" : [
                            {
                                "keyword" : "lianyiqun",
                                "price" : 3.12,
                                "score" : 9
                            },
                            {
                                "keyword" : "chunzhuang",
                                "price" : 5.55,
                                "score" : 8
                            }
                        ]
                    },

内部ドキュメントを照会する方法は?

4

1 に答える 1

0

各配列から条件に一致する 1 つの要素を返す$elemMatch射影演算子があります。

db.test.find( { } , 
              { keywords: { $elemMatch: { score: { $gte: 8 } } } } 
            )

サブドキュメント内のすべての要素をスコア >= 8 で返すには、集計フレームワークを使用できます。

 db.test.aggregate ( [ { $unwind: "$keywords" },
                       { $match: { "keywords.score" : { $gte: 8 } } } 
                     ] )

よろしく

于 2013-03-23T16:19:50.347 に答える