javascript - MongoDB 从数组中返回特定字段

标签 javascript mongodb meteor

我想将查询结果限制为一组字段。这是我的文档之一:

{
    "_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']
    }
  }
},

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

最佳答案

要显示状态和数据(无限)字段,请尝试

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

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

通过 data.name 获取 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()。

到目前为止,我还没有找到根据位置返回数组元素的方法。

关于javascript - MongoDB 从数组中返回特定字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26976942/

相关文章:

mongodb - mongodb mapreduce 函数是否接受文档的计算值作为映射器

ruby-on-rails - Ruby 字符串到 Date 对象

javascript - 如何使用 Meteor Template Helper 增加和显示变量计数器?

javascript - Html 选择框将起点填充为中间值

javascript - 理解 JavaScript 提升和 truthy & falsy

javascript - "blur"事件无故触发?

mongodb - 多个数据源和 Multi-Tenancy 之间有什么区别?

javascript - 尽管存在不安全,但 meteor 更新访问被拒绝

javascript - 如何重新运行我的 Meteor 发布以刷新客户端上集合的内容?

javascript - Bootstrap slider 的奇怪 JS 行为