MongoDB - 如何查询此数据

时间:2012-01-23 09:29:48

标签: mongodb

我正在寻找从MongoDB中检索一些数据,但我不确定如何有效地做到这一点。可能是我的收藏/文档结构不理想,我需要以不同的方式存储它。任何建议将不胜感激..

我有两个集合 - 对象和对象视图

物件

{ 
  "_id" : ObjectId( "4f182ac3369a2b2603010000" ),
  "name" : "Object name",
  "project_id" : "4f182a76369a2b2903000000"
}

对象观看次数

{
"_id" : ObjectId( "4f182ac3369a2b2603010000" ),
  "2012" : {
    "r" : 8,
    "t" : 16,
    "u" : 10,
   }
}

我想从属于特定项目的所有对象的'对象视图'集合中检索2012.r.

以下是我对如何操作的想法:

  1. 有一个查找返回'对象中的所有文档的查询 与_id字段匹配的views集合。对我来说这似乎不是 有效或整洁的做事方式(想象一下,如果有2000年 对象)。
  2. 将project_id字段添加到所有“对象视图”文档,然后执行查找查询以选择与project_id匹配的所有文档。是否不赞成/有效选择多个文件(可能只有2个或多达2000个)?
  3. 专门针对此问题创建一个集合。它将包含每个项目的文档,其中每个文档指定属于该项目的对象的所有实例以及2012.r的值。然后执行查找以选择单个文档。
  4. 任何想法/建议或替代解决方案都将不胜感激!

2 个答案:

答案 0 :(得分:1)

  

将project_id字段添加到所有“对象视图”文档中,然后执行   查找查询以选择与project_id匹配的所有文档。是   它不赞成/有效地选择多个文件(可能有   只有2或多达2000)?

绝对是在性能(db.object_views.find({project_id : "4f182a76369a2b2903000000" }))和代码&查询简单。

驱动程序在引擎盖下进行批处理,因此获取2000个文档并不是什么大问题。

答案 1 :(得分:0)

如果你有强大的SQL背景,你可能会发现this SQL-MongoDB翻译有用:

但是,它在需要时会错过参数中的引号。所以,请注意它。

希望这对你有所帮助