我有以下类型的文档的CouchDB数据库,表示在建筑物内发生的事件:Couchdb:是否可以从另一个视图中查询视图?
{ person: 1
timestamp: 1
event: { type: enter
room: b }
}
和
{ person: 2
timestamp: 5
event: { type: leave
room: b }
}
,我要解决的问题是:我想要知道每个其他人在同一个房间里与人1的时间总和。请注意,任何人都可以在许多不同的时间进入和离开很多房间。我真的不知道MapReduce是否是最好的范例,或者我应该只导出数据并编写一个单独的脚本来计算这些东西(尽管这可能不是我们的生产环境的可行解决方案)。
作为一个开始的解决方案,我们假设所有的数据都是健全的,因此进入房间的人也会在稍后离开那个房间。然而,在最终的解决方案中,这个要求可能不得不放宽,因为有些事件可能会丢失。
我想到了一个潜在的解决方案,但我不知道这是否可能或者如何在couchdb中完成此操作。这是一个大纲。
创建发射以下格式中,对于每个人进入房间事件的视图:
{ [room, person, timestamp], null }
创建用于每一次的人1退出的房间发出
{ [room, timestamp], null}
的图(可能适用于所有人,但没有必要)。创建一个视图,为每个退出除人1以外的任何人的房间事件,执行以下操作。在映射步骤:
- 查询第一种观点找到最后的时间戳当人进入房间。
- 查询第一种观点找到任何时候退出的那个人1进入那个房间
- 对于每一个那个时代的房间时,查询第二种观点找到那个房间所有的退出时间前,和为每个间隔检查重叠是什么。
- 琛这些重叠在一起,并发出为
{ person, time }
减少: 每个人,所有的时间加在一起。
但是,这依赖于我能够弄清楚如何从视图中查询不同的视图。有人知道这是否可能,如果有,如何?
我不确定自己完全了解您的需求,但您可能想尝试使用变更Feed运行视图,以便在人员1离开时获取房间中的所有人员。然后运行你的第二个视图,这是假设你的事件被记录在同一个人的文档中。希望这可以帮助。至于你的问题,我认为你不能在视图中调用一个视图。 – twilson63 2015-02-25 11:54:17
我的问题是,我想在所有事情发生后(每个人都离开大楼)这样做:我想知道人们在同一个房间里共同度过的总时间,所以虽然我可以做到(几乎:必须检查每个出口事件也是如此)与您的解决方案为每个房间,我仍然需要在最后总结他们。但是,还有第二个问题,我没有人员文件,而是事件文件。因此我必须将不同的人物ID(他们的进入和离开事件)联系起来,因此需要不同的观点(通过personID加入所有事件)。 – Acrofales 2015-02-25 13:33:37
是否可以同时管理个人文档和事件文档,然后监视每个房间的事件文档的[更改]输入[输入,离开],然后在输入和每个房间退出时使用时间戳更新个人文档。并在退出时计算房间中的总时间并将其应用于人员文档。那么你应该能够创建一个视图来关闭[房间,人员,总时间]。 – twilson63 2015-02-26 14:03:47