2012-04-10 106 views
0

我的项目在MongoDB中存储这样的:如何在MongoDB中查询?

{"ProductName":"XXXX", 
    "Catalogs" : [ 
    { 
     "50008064" : "Apple" 
    }, 
    { 
     "50010566" : "Box" 
    }, 
    { 
     "50016422" : "Water" 
    } 
]} 

现在我想查询所有的项目都属于目录:50008064,怎么样? (目录编号“50008064”,目录名称为“Apple”)

回答

3

您无法以有效的方式查询此内容,并且性能会随着您的数据增长而下降。因此我会认为这是一个模式的错误,你应该重构/迁移到下面的模型,并允许索引:

{"ProductName":"XXXX", 
    "Catalogs" : [ 
    { 
     id : "50008064", 
     value : "Apple" 
    }, 
    { 
     id : "50010566", 
     value : "Box" 
    }, 
    { 
     id : "50016422", 
     value : "Water" 
    } 
]} 

然后指数:

ensureIndex({'Catalogs.id':1}) 

同样,我强烈建议你换你的模式,因为这是一个潜在的性能瓶颈,你不能以任何其他方式修复。

+0

那么如何查询目录呢?像这样?db.products.find({“Catalogs.50008064”:{$ exists:true}}) – ericyue 2012-04-10 11:30:16

+0

不,像db.products.find({'Catalogs.id':50008064}),它非常干净更快。 – 2012-04-10 11:31:45

0

这应该可能符合the entry here,虽然这不会很快,如链接中所述。

db.products.find({ "Catalogs.50008064" : { $exists: true } })