我有以下架构: -
var P = {
s : [{
data : [],
sec : mongoose.Schema.Types.ObjectId
}]
};
现在我想只查找截面的对象而不是整行。如果我传递sec
值,我只想要该s.data
个对象的sec
值。
示例: -
{ s : [
{
data : [],
sec : '52b9830cadaa9d273200000d'
},{
data : [],
sec : '52b9830cadaa9d2732000005'
}
]
}
结果应该看起来像 -
{
data : [],
sec : '52b9830cadaa9d2732000005'
}
我不想要所有的整排。可能吗?如果是,请帮助我。
答案 0 :(得分:9)
您可以使用$elemMatch
投影运算符将s
之类的数组字段限制为单个匹配元素,但不能使用{删除文档的s
级别{1}}。
find
输出:
db.test.find({}, {_id: 0, s: {$elemMatch: {sec: '52b9830cadaa9d2732000005'}}})
答案 1 :(得分:0)
您始终可以使用find()获取某些字段的值。例如,在您的情况下:
db.collectionName.find({},{s.data:1})
所以第一个括号是应用任何条件或查询,在第二个括号中你必须将字段定义为1(仅获取那些字段值)。
请查看http://docs.mongodb.org/manual/reference/method/db.collection.find了解详情。 如果它能解决您的问题,请告诉我。
答案 2 :(得分:0)
不是进入Mongo或db但是使用纯JavaSript技能这里是解决方案,因为你提到了 Node.js ,它将执行下面的执行任务。
<强>模式强>
var P = { s : [
{
data : [],
sec : '52b9830cadaa9d273200000d'
},{
data : [],
sec : '52b9830cadaa9d2732000005'
}
]
};
搜索方法代码
var search = function (search_sec){
for (var i=0; i<(P.s.length);i++){
var pointer = P.s[i].sec;
var dataRow = P.s[i];
if((pointer) === search_sec ){
console.log(dataRow);
}
}
};
以下是如何致电 - 搜索('search_id');
例如输入: 搜索( '52b9830cadaa9d2732000005'); 强>
<强>输出:强>
[object Object] {
data: [],
sec: "52b9830cadaa9d2732000005"
}