如何在子查询中查询带有ObjectID的字符串

时间:2014-04-29 14:06:11

标签: python django mongodb

我在mongoDB中遇到了查询问题。

此查询已执行:

db.client_data.find(    
... {       
... client_data_type_id : ObjectId("533bde998a223858e3c8d352"),  "list_attributes.535e70158a22382679a738d3" : "535f5b798a22383f5a59c86f"    
... },    
... {
... _id : 1   
... } )

给了我这个结果

{ "_id" : ObjectId("535f5bb78a22383f5a59c870") }
{ "_id" : ObjectId("535f5bd28a22383f5a59c871") }
{ "_id" : ObjectId("535f5bda8a22383f5a59c872") }

我现在想要执行此查询:

db.client_data.find(
{
      client_data_type_id : ObjectId("533a7d258a22383070aa1092"), 
      "list_attributes.535e27768a22387ca86974cb" : 
      {
$in : [
db.client_data.find(    
{       
client_data_type_id : ObjectId("533bde998a223858e3c8d352"),  "list_attributes.535e70158a22382679a738d3" : "535f5b798a22383f5a59c86f"    
},    
{
_id : 1   
} ) 
]
     }
   },
   {
           _id : 0,
    list_attributes : 1
   }
)

如果我用字符串执行此查询,它可以工作:

db.client_data.find(
   {
        client_data_type_id : ObjectId("533a7d258a22383070aa1092"), 
    "list_attributes.535e27768a22387ca86974cb" : 
    {
$in : [
        "535f5bda8a22383f5a59c872",
        "535f5bd28a22383f5a59c871",
"535f5bb78a22383f5a59c870", 
    ]
            }
   },
   {
           _id : 0,
    list_attributes : 1
   }
)

这给了我正确的结果。 但是使用子查询,它不起作用,因为子查询给了我ObjectID,我必须用String执行查询。

你知道怎么做吗??

非常感谢!

1 个答案:

答案 0 :(得分:1)

您可以使用str(objectid)将ObjectId转换为十六进制表示。

http://api.mongodb.org/python/1.7/api/pymongo/objectid.html