2015-10-14 34 views
0

下面是文档:

{ 
    name:"james", 
    files:[ 
     {name:"file1.txt", content:"..."}, 
     {name:"file2.txt", content:"..."}, 
     {name:"file3.txt", content:"..."} 
    ], 
    status:4 
} 

想要让查询并返回:

  1. 所有根领域包括files

  2. files只包含file2.txt信息,coze content非常大,只对感兴趣

我知道使用$elemMatch在查找查询,如下图所示:

db.collection.find(
    {'files':{$elemMatch:{name:'file2.txt'}} }, 
    {name:1, status:1, 'files.$':1 } 
) 

有什么办法避免列表中的所有投影领域,并得到所有的钥匙?

要求:要求所有领域,但没有列出关键(不列出name:1, status:1

+0

你在这里要求什么?如何同时包含'name'和'status'?当然,请在投影中询问他们。 MongoDB的“投影”是“全部或全部”,所以如果你不要求它,你就不会得到它。在这种情况下,没有等效的SQL *。要求**所有**你想要的领域。 [非常清楚地覆盖在文档中](http://docs.mongodb.org/manual/tutorial/project-fields-from-query-results/),当然除了['$ slice''](http: //docs.mongodb.org/manual/reference/operator/projection/slice/) –

回答

0

这是你问什么,即返回所有领域,但对于files场仅返回“ files2.txt“价值?

db.collection.find({ 'files':{$elemMatch:{name:'file2.txt'}} }, { 'files.$':1, name:1, status:1 })