我有一个集合数据库,在数据不断变化的某个时间点拍摄集合的快照,但我需要创建可重复的过程,从而创建快照。我通过在某个时间点复制主集合并将其重命名来实现这一点。例如"Captures20220123"。
我需要能够查询所有集合的整个列表,例如"Captures"、"Captures20220123"、"Capture s20220122"等。
是否可以在MongoDB中创建一个视图,该视图聚合来自所有名称为"Captures*"的集合的数据?
我知道我可以在客户端查询集合名称,并以这种方式动态构建查询,但不知道在视图中是否可行,因为我有几个不同语言的不同客户端。
谢谢!
原则上你可以这样做:
var pipeline = []
firstCol = db.getSiblingDB('config').collections.findOne({_id: /Captures/ }).sort( {_id: 1} )
db.getSiblingDB('config').collections.find({_id: /Captures/ }).sort( {_id: 1} ).skip(1).forEach( ( col ) => {
pipeline.push({ $unionWith: col._id })
})
db.createView("AllCaptures", firstCol , pipeline)
当然,当创建新集合时,您必须每天运行此过程。仔细测试,性能可能很糟糕。我想最后你会一个接一个地查询集合。
BTW而不是";复制并重命名";如果你试图将数据插入到一个不存在的集合中,那么MongoDB会自动创建一个新的集合。您可能只需要在新集合上创建一些索引。