2014-11-17 41 views
1

我想限制我的查询结果为一组字段。这是我的证件之一:MongoDB返回数组中的特定字段

{ 
    "_id" : "WA9QRuiWtGsr4amtT", 
    "status" : 3, 
    "data" : [ 
     { 
      "name" : "0", 
      "value" : "Text ..." 
     }, 
     { 
      "name" : "1", 
      "value" : "12345678" 
     }, 
     { 
      "name" : "2", 
      "value" : "Text" 
     }, 
     { 
      "name" : "4", 
      "value" : "2" 
     }, 
     { 
      "name" : "8", 
      "value" : true 
     }, 
     { 
      "name" : "26", 
      "value" : true 
     }, 
    ], 
    "userId" : "7ouEumtudgC2HX4fF", 
    "updatedAt" : NumberLong(1415903962863) 
} 

我想限制输出状态区域以及一个第一和第三的数据文件。

这是我的尝试:

Meteor.publish('cases', function() { 

    var fields = { 
    currentStatus: 1, 
    'data.0': 1, 
    'data.2': 1 
    }; 

    return Cases.find({}, { fields: fields }); 
}); 

可悲的是它不工作。我发现的其他东西是$ elemMatch,但它只返回第一个元素:

data: { 
    $elemMatch: { 
    name: { 
     $in: ['0', '2'] 
    } 
    } 
}, 

如何限制输出到这些字段?

+0

数据如何处理[0]或数据[0]?没有'' – Sindis

回答

0

显示状态和数据(无限制)领域的尝试

cases.find({}, {"status":1, "data":1}) 

这是简单的查询,以限制“数据”输出,您将需要更加努力地工作:)

通过数据获取1元。名(未通过的位置):

cases.find({}, {status:1, "data": {$elemMatch:{name:"0"}}}) 

找data.name 1个元件,但是从值的列表:

cases.find({}, {status:1, "data": {$elemMatch:{name:{$in:["0", "1"]}}}}) 

为了贴近您的问题,您可以试试redact。这在Mongodb 2.6中是新的。 或者在以前的版本中使用$ unwind和.aggregate()。

到目前为止,我没有看到一种方法来返回基于位置的数组元素。

相关问题