我想将查询结果限制为一组字段。这是我的文档之一:
{
"_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/