0

ingredientsの要素 0 が であるすべてのドキュメントを検索したいと思いますapple。だから私はドキュメント1と3を取得したいのですが、2は取得したくありません。そのようなことはMongoでネイティブに可能ですか?

そのままの例では意味がありませんが、私のアプリケーションは複雑すぎてここに掲載できませんでした。

{
    _id => 1
    name => 'best smoothie' 
    ingredients => Array
        (
            [0] => apple
            [1] => raspberry
            [2] => orange
            [3] => banana
        )
}

 

{
    _id => 2
    name => 'summer smoothie' 
    ingredients => Array
        (
            [0] => lemon
            [1] => mint
            [2] => apple

        )
}

 

{
    _id => 3
    name => 'yogurt smoothie' 
    ingredients => Array
        (
            [0] => apple
            [1] => blueberry

        )
}

借用例 - Mongo を使用した配列要素のクエリ

4

3 に答える 3

4

配列位置演算子 ( docs ) を使用できます。$便利なのは、一般的な構文を使用するのではなく、同じパターンを使用して特定のインデックスを指定できることです。

これがあなたのデータであると仮定します:

> db.so1.insert({name:"best smoothie", ingredients: ['apple','raspberry','orange','banana']})
> db.so1.insert({name:"summer smoothie", ingredients: ['lemon','mint','apple']})
> db.so1.insert({name:"yogurt smoothie", ingredients: ['apple','blueberry']})

検索を index position のみに制限したい場合は、0以下に示すように、それを配列プロパティ名に追加するだけです:

> db.so1.find({'ingredients.0':'apple'})

結果:

{
        "_id" : ObjectId("51c4425ff227e278e59f5df5"),
        "name" : "best smoothie",
        "ingredients" : [
                "apple",
                "raspberry",
                "orange",
                "banana"
        ]
}
{
        "_id" : ObjectId("51c4428af227e278e59f5df7"),
        "name" : "yogurt smoothie",
        "ingredients" : [
                "apple",
                "blueberry"
        ]
}
于 2013-06-21T12:14:17.010 に答える
0

simple を使用してこれを達成する方法がわかりませんarray。ただし、ハッシュの配列を使用してできることは次のとおりです。

> db.collections.find()
{ "_id" : ObjectId("51c400d2b9f10d2c26817c5f"), "ingredients" : [ { "value1" : "apple" }, { "value2" : "orange" } ] }
{ "_id" : ObjectId("51c400dbb9f10d2c26817c60"), "ingredients" : [ { "value1" : "mint" }, { "value2" : "apple" } ] }
{ "_id" : ObjectId("51c400e1b9f10d2c26817c61"), "ingredients" : [ { "value1" : "apple" }, { "value2" : "lemon" } ] }

> db.collections.find({ ingredients: { $elemMatch: { value1: 'apple' }}})
{ "_id" : ObjectId("51c400d2b9f10d2c26817c5f"), "ingredients" : [ { "value1" : "apple" }, { "value2" : "orange" } ] }
{ "_id" : ObjectId("51c400e1b9f10d2c26817c61"), "ingredients" : [ { "value1" : "apple" }, { "value2" : "lemon" } ] }
于 2013-06-21T07:32:02.110 に答える