我有這樣一個集合:pymongo - 得到深度嵌套的objectID
db.attributes.find({"name" : {"en-UK" : "Fabric"}}).pretty();
{
"_id" : ObjectId("5550dab4a14c9766418ff2dc"),
"values" : {
"source" : [
{
"code" : 1,
"_id" : ObjectId("5550dab4a14c9766418ff2bf"),
"name" : {
"fr-FR" : "Coton",
"it-IT" : "Cotone",
"en-UK" : "Cotton",
"es-ES" : "Algodón"
}
},
{
"code" : 2,
"_id" : ObjectId("5550dab4a14c9766418ff2c0"),
"name" : {
"fr-FR" : "Viscose",
"it-IT" : "Viscosa",
"en-UK" : "Viscose",
"es-ES" : "Viscosa"
}
},
{
"code" : 3,
"_id" : ObjectId("5550dab4a14c9766418ff2c1"),
"name" : {
"fr-FR" : "Coton peigné",
"it-IT" : "Cotone pettinato",
"en-UK" : "Combed Cotton",
"es-ES" : "Algodón peinado"
}
},
{
"code" : 4,
"_id" : ObjectId("5550dab4a14c9766418ff2c2"),
"name" : {
"fr-FR" : "Polyester",
"it-IT" : "Poliestere",
"en-UK" : "Polyester",
"es-ES" : "Poliéster"
}
},
{
"code" : 5,
"_id" : ObjectId("5550dab4a14c9766418ff2c3"),
"name" : {
"fr-FR" : "Tencel© Lyocell",
"it-IT" : "Tencel© Lyocell",
"en-UK" : "Tencel© Lyocell",
"es-ES" : "Tencel© Lyocell"
}
},
{
"code" : 6,
"_id" : ObjectId("5550dab4a14c9766418ff2c4"),
"name" : {
"fr-FR" : "Coton peigné biologique",
"it-IT" : "Cotone pettinato biologico",
"en-UK" : "Combed Organic Cotton",
"es-ES" : "Algodón peinado orgánico"
}
},
{
"code" : 7,
"_id" : ObjectId("5550dab4a14c9766418ff2c5"),
"name" : {
"fr-FR" : "Viscose de bambou",
"it-IT" : "Viscosa di bamboo",
"en-UK" : "Bamboo Viscose",
"es-ES" : "Viscosa de bambú"
}
},
{
"code" : 8,
"_id" : ObjectId("5550dab4a14c9766418ff2c6"),
"name" : {
"fr-FR" : "Coton biologique",
"it-IT" : "Cotone biologico",
"en-UK" : "Organic Cotton",
"es-ES" : "Algodón orgánico"
}
},
{
"code" : 9,
"_id" : ObjectId("5550dab4a14c9766418ff2c7"),
"name" : {
"fr-FR" : "Polyester recyclé",
"it-IT" : "Poliestere riciclato",
"en-UK" : "Recycled Polyester",
"es-ES" : "Poliéster reciclado"
}
},
{
"code" : 10,
"_id" : ObjectId("5550dab4a14c9766418ff2c8"),
"name" : {
"fr-FR" : "Modal",
"it-IT" : "Modal",
"en-UK" : "Modal",
"es-ES" : "Modal"
}
},
{
"code" : 11,
"_id" : ObjectId("5550dab4a14c9766418ff2c9"),
"name" : {
"fr-FR" : "Lycra Elastane",
"it-IT" : "Lycra élasthanne",
"en-UK" : "Lycra Elastane",
"es-ES" : "Licra Elastano"
}
},
{
"code" : 12,
"_id" : ObjectId("5550dab4a14c9766418ff2ca"),
"name" : {
"fr-FR" : "Coton issu de culture biologique, recyclé pré-consommation",
"it-IT" : "Cotone coltivato biologicamente riciclato pre-consumo",
"en-UK" : "Recycled pre-consumer cotton organically grown",
"es-ES" : "Algodón orgánico reciclado pre-consumo"
}
},
{
"code" : 13,
"_id" : ObjectId("5550dab4a14c9766418ff2cb"),
"name" : {
"fr-FR" : "Polyester recyclé post-consommation",
"it-IT" : "Poliestere riciclato post-consumo",
"en-UK" : "Recycled post-consumer polyester",
"es-ES" : "Polyéster recilado post-consumo"
}
},
{
"code" : 14,
"_id" : ObjectId("5550dab4a14c9766418ff2cc"),
"name" : {
"fr-FR" : "Élasthanne",
"it-IT" : "Elasthan",
"en-UK" : "Elastane",
"es-ES" : "Elastano"
}
}
],
"name" : [
{
"_id" : ObjectId("5550dab4a14c9766418ff2cd"),
"name" : {
"en-UK" : "3-ply Loopback"
}
},
{
"_id" : ObjectId("5550dab4a14c9766418ff2ce"),
"name" : {
"en-UK" : "Brushed 2-ply"
}
},
{
"_id" : ObjectId("5550dab4a14c9766418ff2cf"),
"name" : {
"en-UK" : "Brushed 3-ply"
}
},
{
"_id" : ObjectId("5550dab4a14c9766418ff2d0"),
"name" : {
"en-UK" : "Canvas Weave"
}
},
{
"_id" : ObjectId("5550dab4a14c9766418ff2d1"),
"name" : {
"en-UK" : "Fine Jersey"
}
},
{
"_id" : ObjectId("5550dab4a14c9766418ff2d2"),
"name" : {
"en-UK" : "Fleece"
}
},
{
"_id" : ObjectId("5550dab4a14c9766418ff2d3"),
"name" : {
"en-UK" : "Interlock"
}
},
{
"_id" : ObjectId("5550dab4a14c9766418ff2d4"),
"name" : {
"en-UK" : "Jersey"
}
},
{
"_id" : ObjectId("5550dab4a14c9766418ff2d5"),
"name" : {
"en-UK" : "Piqué"
}
},
{
"_id" : ObjectId("5550dab4a14c9766418ff2d6"),
"name" : {
"en-UK" : "Plain weave"
}
},
{
"_id" : ObjectId("5550dab4a14c9766418ff2d7"),
"name" : {
"en-UK" : "Rib"
}
},
{
"_id" : ObjectId("5550dab4a14c9766418ff2d8"),
"name" : {
"en-UK" : "Sheer Jersey"
}
},
{
"_id" : ObjectId("5550dab4a14c9766418ff2d9"),
"name" : {
"en-UK" : "Supersoft Jersey"
}
},
{
"_id" : ObjectId("5550dab4a14c9766418ff2da"),
"name" : {
"en-UK" : "Twill weave"
}
},
{
"_id" : ObjectId("5550dab4a14c9766418ff2db"),
"name" : {
"en-UK" : "Woven Twill"
}
}
]
},
"name" : {
"en-UK" : "Fabric"
}
}
我使用這個代碼來獲取fabric.name
def get_attribute_fabric(name):
attribute_fabric_meta = db.attributes.aggregate([{ '$match': {'name.en-UK': 'Fabric'} },
{ '$unwind' : '$values' },
{ '$project': { 'name' : '$values.name', 'valueId': '$values._id'} },
{ '$match': {
'$and': [
{'name.en-UK': str(name)}
]
}
}])
,但我得到這個錯誤
pymongo.errors.OperationFailure:命令SON([('aggregate',u'attributes'),('pipeline',[{'$ match ':{'name.en-UK':'Fabric'}},{'$ unwind':'$ values'},{'$ project':{'valueId':'$ values._id','name' :'$ values.name'}},{'$ match':{'$ and':[{'name.en-UK':'Jersey'}]}}])])失敗:exception:$ unwind:值在字段路徑末尾必須是數組
我想返回objectId
。
任何意見大加讚賞
感謝,這是偉大的,我必須將代碼更改爲'def get_attribute_fabric(name): \t attribute_fabric_meta = db.attributes.aggregate([0126]\t \t { '$開卷': '$ values.name'}, \t \t { '$項目':{ '名': '$ values.name.name'}}, \t \t { '$匹配' :{'name.en-UK':name}} \t])'''爲它工作 – khinester