MongoDB:通过扩展集合集创建动态视图



我有一个集合数据库,在数据不断变化的某个时间点拍摄集合的快照,但我需要创建可重复的过程,从而创建快照。我通过在某个时间点复制主集合并将其重命名来实现这一点。例如"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会自动创建一个新的集合。您可能只需要在新集合上创建一些索引。

最新更新