python - 如何将项目推送到数组并在 MongoDB 中获取该项目的索引,find_one_and_update pymongo 中的投影
问题描述
我想将一个项目 $push 到一个数组中并确定它被插入的索引。我怎么能用 Mongo 做到这一点?
我需要这是原子的,因为多个推送可以在文档上并行发生。
我使用 Python/PyMongo 作为驱动程序。
解决方案
您可以将数组的大小与数组一起存储在文档中,并在更新后获取该值:
示例输入文档:{ '_id: 1', 'arr': [ "apple", "orange" ] }
更新操作 - 使用管道进行更新(适用于 MongoDB 版本 4.2):
NEW_ITEM = 'pear'
r = collection.find_one_and_update(
{ '_id': 1 },
[
{
'$set': {
'ix': { '$size': '$arr' },
'arr': { '$concatArrays': [ '$arr', [ NEW_ITEM ] ] }
}
}
],
projection = { '_id': False, 'ix': True },
return_document = ReturnDocument.AFTER
)
另一种方法是在同一更新操作中设置新插入元素的索引(如果数组元素是唯一的,则可以使用此方法):
[
{
'$set': {
'arr': { '$concatArrays': [ '$arr', [ NEW_ITEM ] ] }
},
'$set': {
'ix': { '$indexOfArray': [ '$arr', NEW_ITEM ] }
}
}
]
推荐阅读
- c# - 沃尔沃创新门户 API 的实施
- python - Edit setup to allow argument mismatch in gcc compilation
- asp.net - 来自 asp.net 的异步类库 dll 方法
- elasticsearch - elasticsearch中的解析器异常
- chef-infra - 数据狗厨师包装食谱失败
- python - Pytorch AssertionError:张量之间的大小不匹配
- python - sklearn naive bayes MultinomialNB:尽管我有 2 个类,为什么我只得到一个带系数的数组?
- python-3.x - 我想安装 textblob
- python - 如何用索引向后枚举python中的列表(从结尾到开头)
- gitlab-ci - 无法用 gitlab 实现 CI/CD