我想使用pymongo迭代Mongodb数据库Arraylist项(事务列表)并删除Arraylist特定的(事务列表)项?在
我使用python pymongo创建如上所述的Mongo集合。我想用pymongo迭代数组列表项并只删除Arraylist中的最后一项?在
使用Python pymongo的数据插入查询
# added new method create block chain_structure
def addCoinWiseTransaction(self, senz, coin, format_date):
self.collection = self.db.block_chain
coinValexists = self.collection.find({"_id": str(coin)}).count()
print('coin exists : ', coinValexists)
if (coinValexists > 0):
print('coin hash exists')
newTransaction = {"$push": {"TRANSACTION": {"SENDER": senz.attributes["#SENDER"],
"RECIVER": senz.attributes["#RECIVER"],
"T_NO_COIN": int(1),
"DATE": datetime.datetime.utcnow()
}}}
self.collection.update({"_id": str(coin)}, newTransaction)
else:
flag = senz.attributes["#f"];
print flag
if (flag == "ccb"):
print('new coin mined othir minner')
root = {"_id": str(coin)
, "S_ID": int(senz.attributes["#S_ID"]), "S_PARA": senz.attributes["#S_PARA"],
"FORMAT_DATE": format_date,
"NO_COIN": int(1),
"TRANSACTION": [{"MINER": senz.attributes["#M_S_ID"],
"RECIVER": senz.attributes["#RECIVER"],
"T_NO_COIN": int(1),
"DATE": datetime.datetime.utcnow()
}
]
}
self.collection.insert(root)
else:
print('new coin mined')
root = {"_id": str(coin)
, "S_ID": int(senz.attributes["#S_ID"]), "S_PARA": senz.attributes["#S_PARA"],
"FORMAT_DATE": format_date,
"NO_COIN": int(1),
"TRANSACTION": [{"MINER": "M_1",
"RECIVER": senz.sender,
"T_NO_COIN": int(1),
"DATE": datetime.datetime.utcnow()
}
]
}
self.collection.insert(root)
return 'DONE'
要删除最后一个条目,一般的想法(如您所述)是迭代数组并获取最后一个元素的索引(由其} 删除它来更新集合。因此,这项工作所需的关键数据是}。在
DATE
字段表示),然后通过使用^{DATE
值和文档的{您可以采取的一种方法是首先使用聚合框架来获取这些数据。这样,您就可以运行一个管道,其中第一步是使用使用标准MongoDB查询的^{} 操作符过滤集合中的文档。在
过滤文档后的下一步是展平} 运算符实现,对于每个输入文档,输出n个文档,其中n是数组元素的数目,对于空数组可以是零。在
TRANSACTION
数组,即对列表中的文档进行非规范化处理,这样就可以过滤最后一个项目,即通过DATE
字段获得最后一个文档。这可以通过^{解构数组之后,为了得到最后一个文档,使用^{} 运算符,在这里可以重新组合展开的文档,并在此过程中使用groupaccumulator运算符来获得
最后一个} 运算符。在
TRANSACTION
日期,方法是使用应用于其嵌入的DATE
字段的^{因此,本质上,运行以下管道并使用结果来更新集合。例如,可以运行以下管道:
mongo外壳
然后,您可以使用^{} 方法或聚合游标从该聚合操作中获取包含更新数据的文档,并更新您的集合:
^{pr2}$python
或者,也可以运行单个聚合操作,该操作还将使用^{} 管道更新集合,该管道将管道的结果写入同一个集合:
例如,可以运行以下管道:
mongo外壳
python
虽然这种方法可能比第一种方法更有效,但它首先需要了解现有领域,因此在某些情况下,解决方案不可行。在
相关问题 更多 >
编程相关推荐