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)
...现在它工作正常。为其他可能需要此功能的人保留此问题。