Django从json对象查询视图中的MongoDB ObjectIds

问题描述:

我目前正在Python Django中查询MongoDB对象,并且在创建查询时没有麻烦,如果它是所需的其他属性。Django从json对象查询视图中的MongoDB ObjectIds

但是我需要修改我的查询,特别是通过返回一个或没有找到对象的ObjectIds进行过滤。

从我的JavaScript我传递一个JSON数据到我的Django的views.py这里是它目前的样子:

def update(request): 
    #AJAX data 
    line = json.loads(request.body) 

    _id = line['_id'] 
    print("OBJECT_ID: %s" % (_id)) 
    another_id = line['another_id'] 
    print("ANOTHER_ID: %s" % (another_id)) 

*不要混淆another_id,也有具有相同another_id S和不幸的对象必须保持那样。这就是为什么我无法查询它的更新,因为它会更新所有重复项。这就是为什么我需要ObjectId的原因。

对于检查这里就是它打印出:

{u'$oid': u'582fc95bb7abe7943f1a45b2'} 
ANOTHER_ID: LTJ1277 

所以我追加查询中views.py这样的:

try: 
     Line.objects(_id=_id).update(set__geometry=geometry, set__properties=properties) 
     print("Edited: " + another_id) 
    except: 
     print("Unedited.") 

但是,这并不返回任何对象。

所以我在想,如果查询本身不能在JSON体认$oid"_id" : ObjectId("582fc95bb7abe7943f1a45b2")

*编辑:

from bson.objectid import ObjectId 

,我跟编辑我views.py

_id = line['_id'] 
    print("VALUES: %s" % (_id.get('$oid'))) 

    try: 
    Line.objects(_id=ObjectId(_id.get('$oid'))).update(set__geometry=geometry, set__properties=properties) 

输出:

VALUES: 582fc95bb7abe7943f1a498c 

没有运气。仍然没有查询/未找到。

根据这一Using MongoDB with Django参考网站:

注意,访问唯一的对象ID,您可以使用 “身份证”,而不是 “_id”。

我试图修改代码:

Line.objects(_id=ObjectId(_id.get('$oid'))).update(set__geometry=geometry, set__properties=properties) 

Line.objects(id=ObjectId(_id.get('$oid'))).update(set__geometry=geometry, set__properties=properties) 

...现在它工作正常。为其他可能需要此功能的人保留此问题。