我在MongoDB集合中有一个名为locations
的字段ip_addresses
。此字段如下所示:
[['178.150.147.148'], ['198.16.78.43']]
我想在ip_addresses
中的特定位置添加一个新的ip地址。例如,第一个列表中的“192.162.78.101”(其中“178.150.147.148”是)。
期望输出:
[['178.150.147.148', '192.162.78.101'], ['198.16.78.43']]
我在pymongo
中的查询:
find_index = 0
new_date = "12/29/2019"
ip = "192.162.78.101"
db.locations.find_one_and_update({"date": new_date},
{"$push": {"ip_addresses.$[element]": ip}},
{"multi": False, "arrayFilters": [{"element": {"$eq": find_index}}]},
# Try using each and position but didn't succeed
# "$each": ['ip'],
# "$position": find_index}}},
upsert=True,
return_document=ReturnDocument.AFTER)
但我有个错误:
pymongo.errors.OperationFailure: No array filter found for identifier 'element' in path 'ip_addresses.$[element]'
尝试搜索pymongo和mongodb文档-ifarrayFilters
在pymongo中实现,因为我找不到任何使用它的示例。如果没有arrayFilters
也许有机会得到我想要的
在pymongo中,数组过滤器被指定为函数的参数,而不是在对象中。这可能就是你想要的:
但是,只有当
find_index
包含要附加到的数组中的ip地址时,这种方法才有效;i、 e,如果find_index='178.150.147.148'
,它就会工作。换句话说,上面的语句是:“将‘192.162.78.101’添加到已经包含‘178.150.147.148’的子数组中。”如果要指定的是子数组的索引,只需使用位置点表示法,如下所示:
相关问题 更多 >
编程相关推荐