我目前正致力于在Python Django中查询MongoDB对象,并且如果需要其他属性,则可以毫无困难地创建查询。
但是我需要修改我的查询以专门过滤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
,不幸的是必须保持这样。这就是我无法查询更新的原因,因为它会更新所有重复项。这就是我需要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
没有运气。仍然没有查询/没有找到。
答案 0 :(得分:2)
根据此Using MongoDB with Django参考网站:
请注意,要访问唯一对象ID,请使用" 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)
......现在它运作正常。将此问题留给可能需要此问题的其他人。