我如何获得正确的子文档?因为在这里我得到了“全部”!
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}]
对不起标签,我只是想添加新元素,我得到了这个:(
答案 0 :(得分:2)
如果每个文档只有一个匹配的子文档(或者您很乐意只返回第一个匹配的子文档),则可以使用positional operator ($)。
在mongo
shell中使用它的示例:
db.users.find({ “produit_up.tags”:{$中:[ “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" }}
)
答案 1 :(得分:0)
使用限制。
db.users.find({"produit_up.tags":{"$in":["ddsfdsf"]}}).limit(1);