1

特定の条件に一致するキーのオブジェクトの配列から値を取得しようとしています。配列内のオブジェクトの場合、キーはlongで、値は文字列になります。MondgoDBドキュメントのサンプルは次のとおりです。

"_id" : ObjectId("509eba6d84f30613b4aee1ca"),
"timestamps" : [
    {
        "1234" : "ABC"
    },
    {
        "2345" : "DEF"
    },
    {
        "3456" : "GHI"
    },
    {
        "4567" : [
            "JKL",
            "ABC"
        ]
    },
    {
        "5678" : "GHI"
    }
],
"word" : "foo"

たとえば、キーが3000未満であるすべての「タイムスタンプ」エントリの値を取得したいと思います(つまり、上記の「ABC」と「DEF」)。コレクション内のどのドキュメントが特定のキーを持っているかを使用して見つけることができただけですが、coll.find({"timestamps.4567":{$exists:true}})次のようなことを試しても結果が得られませんcoll.find({"timestamps":{$lt:3000}})-タイムスタンプのキーが値ではなく3000未満であるかどうかをチェックするものが明らかに欠落していますタイムスタンプ自体の。

4

1 に答える 1

3

多分私はそれをすべて間違っていました...あなたはあなたの文書の構造を少し変える必要があるようです:

"_id" : ObjectId("509eba6d84f30613b4aee1ca"),
"timestamps" : [
{
    "key": "1234",
    "val": "ABC"
},
{
    "key": "2345",
    "val": "DEF"
},
"word" : "foo"

次に、次を使用してクエリを実行できますelemMatch

db.test.find({timestamps: {$elemMatch: {'key': {$gt: '1234'}}}})

インデックスがあることを確認してくださいtimestamps.key

HTH

于 2012-11-11T00:19:25.017 に答える