1

適切なサブドキュメントを取得するにはどうすればよいですか?ここで私は「すべて」を得たので!

db.users.find({"produit_up.tags":{"$in":["ddsfdsf"]}}).distinct("produit_up")
Out[1]: 
[{u'abus': 0,
 u'avctype': u'image/jpeg',
 u'date': u'2012-09-15',
 u'description': u'ddsfdsf sdfsdfsdf',
 u'id': u'alucaard134773657029',
 u'namep': u'nokia 3310',
 u'nombre': 2,
 u'orientation': u'portrait',
 u'photo': ObjectId('5054d3fa3a5f3a0598b792a2'),
 u'prix': 24,
 u'tags': [u'ddsfdsf', u'sdfsdfsdf'],
 u'vendu': False},
{u'abus': 0,
 u'avctype': u'image/jpeg',
 u'date': u'2012-09-15',
 u'description': u'dfsdfdsf dsfsdfdsfsdf dsfsdfsdf sdfsdfsdf',
 u'id': u'alucaard134773653643',
 u'namep': u'iphone 4gs',
 u'nombre': 2,
 u'orientation': u'portrait',
 u'photo': ObjectId('5054d3d83a5f3a0598b792a0'),
 u'prix': 18,
 u'tags': [u'dfsdfdsf', u'dsfsdfdsfsdf', u'dsfsdfsdf', u'sdfsdfsdf'],
 u'vendu': False}]

タグをごめんなさい、私はちょうど新しい要素を追加しようとしていました、そして私はこれを手に入れました:(

4

2 に答える 2

2

各ドキュメントに一致するサブドキュメントが 1 つしかない場合 (または最初に一致したサブドキュメントのみを返したい場合) は、位置演算子 ($)を使用できます。

mongoこれをシェルで使用する例:

db.users.find({"produit_up.tags":{$in:["ddsfdsf"]}},{"produit_up.$":1})

{
    "_id" : ObjectId("5055a7abac2ec70755816f7b"),
    "produit_up" : [
        {
            "abus" : 0,
            "avctype" : "image/jpeg",
            "date" : "2012-09-15",
            "description" : "ddsfdsf sdfsdfsdf",
            "id" : "alucaard134773657029",
            "namep" : "nokia 3310",
            "nombre" : 2,
            "orientation" : "portrait",
            "photo" : ObjectId("5054d3fa3a5f3a0598b792a2"),
            "prix" : 24,
            "tags" : [
                "ddsfdsf",
                "sdfsdfsdf"
            ],
            "vend" : false
        }
    ]
}

各ドキュメントに対して複数の一致するサブドキュメントを返したい場合は、MongoDB 2.2の新しいAggregation Frameworkを使用できます。

db.users.aggregate(

    // Match on indexed `tags` field to limit results
    { $match : { "produit_up.tags":"ddsfdsf" }},

    // Convert produit_up array embedded docs to a stream of documents  
    { $unwind: "$produit_up" },

    // Find all matching subdocuments
    { $match : { "produit_up.tags":"ddsfdsf" }}
)
于 2012-09-16T10:59:00.083 に答える
0

使用制限。

db.users.find({"produit_up.tags":{"$in":["ddsfdsf"]}}).limit(1);
于 2012-09-15T23:41:24.287 に答える