2016-11-16 55 views
0

我在MongoDB中使用包含子文档集合的$操作符时遇到问题。我使用流星,我有一个集合,它看起来像这样:使用Meteor返回子文档中的特定字段

{ 
    "_id": "A", 
    "data_fields": [ 
     {name: "artist", value: "Nirvana"}, 
     {name: "album", value: "Smells Like"}, 
     {name: "random_fieldname1", value: "random_value1"}, 
    ] 
}, 
{ 
    "_id": "B", 
    "data_fields": [ 
     {name: "artist", value: "The Strokes"}, 
     {name: "album", value: "Room on Fire"}, 
     {name: "random_fieldname2", value: "random_value2"}, 
    ] 
} 

我想创建一个字符串对应于任何“艺术家”或“专辑”,返回值匹配查询只有这两个字段(不是上面例子中的“随机”字段)。

例如,如果I输入“必杀技”或“闻起来像”时,输出应该是以下:

{ 
     "_id": "A", 
     "data_fields": [ 
      {name: "artist", value: "Nirvana"}, 
      {name: "album", value: "Smells Like"}, 
     ] 
    } 

(注意,与名称=“random_fieldname1”数组元素不应该在输出)。

这可能吗?如果可能的话,我宁愿避免使用聚合框架。

非常感谢您提前。

+0

请添加你迄今为止尝试过的帖子。 – Veeram

+0

请在您构建查询的地方张贴您的流星代码。 –

+0

对不起,我没有储存我正在尝试的,但我真的无处可去。来自@satishchennupati的代码几乎完成了工作,但没有显示具有专辑字段的数组元素。 – user3856970

回答

1

下面的查询将返回唯一匹配的子文档

db.aaa.find({"data_fields.value":"Nirvana"},{"data_fields.$":1}) 

认为我已经在MongoDB中

{ 
     "_id" : "A", 
     "data_fields" : [ 
       { 
         "name" : "artist", 
         "value" : "Nirvana" 
       }, 
       { 
         "name" : "album", 
         "value" : "Smells Like" 
       }, 
       { 
         "name" : "random_fieldname1", 
         "value" : "random_value1" 
       } 
     ] 
} 
{ 
     "_id" : "B", 
     "data_fields" : [ 
       { 
         "name" : "artist", 
         "value" : "The Strokes" 
       }, 
       { 
         "name" : "album", 
         "value" : "Room on Fire" 
       }, 
       { 
         "name" : "random_fieldname2", 
         "value" : "random_value2" 
       } 
     ] 
} 

以下和执行上面的查询将返回我:

{ 
"_id" : "A", 
"data_fields" : [ 
{ "name" : "artist", 
"value" : "Nirvana" } ] 
} 
+0

非常感谢!这看起来不错,但是还有一种方法可以返回相册,如示例输出中所示? – user3856970

+0

你的意思是即使你用“Nirvana”搜索,你想要两个记录,即艺术家和专辑,但过滤掉随机的东西?对 ? –

+0

正是!这是可行的吗? – user3856970

相关问题