{
"_id" : "R9zbu8oTWwgxT5eCR",
"practiceSetup" : {
"operatoriesSettings" : [
{
"name" : "Operatory 1",
"description" : "Room 1",
"status" : true
},
{
"name" : "Operatory 2",
"description" : "Room B",
"status" : true
}
],
}
我正在尝试查找名为“Operatory 1”的对象,并且只返回该对象。
这是我尝试过的,
Practice.findOne({ _id: 'R9zbu8oTWwgxT5eCR' }, { "$elemMatch": { "practiceSetup.operatoriesSettings": { "name": "Operatory 1" } } } );
然而,这将返回整个文档,而不是那个特定的对象,不知道我在这里做错了什么。
答案 0 :(得分:0)
你可以试试这个,
int numberOfNegativeNumbers = countNeg(nums, 0);
这将返回:
Practice.findOne({ _id: 'R9zbu8oTWwgxT5eCR' }).map(function(u){
return u.practiceSetup
.operatoriesSettings
.filter( m => m.name == "Operatory 1");
})
答案 1 :(得分:0)
这就是$elemMatch
投影的工作原理:
$ elemMatch运算符将查询结果中字段的内容限制为仅包含与$ elemMatch条件匹配的第一个元素。
如果您只需要特定的子文档,可以使用JS获取它:
const doc = Practice.findOne(
{ _id: 'R9zbu8oTWwgxT5eCR' },
{
$elemMatch: {
'practiceSetup.operatoriesSettings': {
name: 'Operatory 1'
}
}
}
);
const operator1 = doc.practiceSetup.operatoriesSettings[0];
答案 2 :(得分:0)
我发现使用"预测"将从数组返回匹配的对象。
查询:
{ "_id": "R9zbu8oTWwgxT5eCR", "practiceSetup.operatoriesSettings": { $elemMatch: {'name': 'Operatory 1'} } }
投影
{"practiceSetup.operatoriesSettings.$.name": 1}
完整查询:
db.Practice.findOne({
"_id" : "R9zbu8oTWwgxT5eCR",
"practiceSetup.operatoriesSettings" : {
"$elemMatch" : {
"name" : "Operatory 1"
}
}
}, {
"practiceSetup.operatoriesSettings.$.name" : 1.0
});
返回
{
"_id" : "R9zbu8oTWwgxT5eCR",
"practiceSetup" : {
"operatoriesSettings" : [
{
"name" : "Operatory 1",
"description" : "Room 1",
"status" : true
}
]
}
}
<强>流星强>
使用Meteor方法时,您需要使用&#34; fields&#34;使用投影时。
return Practice.findOne({
"_id": "R9zbu8oTWwgxT5eCR",
"practiceSetup.operatoriesSettings": {
"$elemMatch": {
"name": data
}
}
},
{ fields: { 'practiceSetup.operatoriesSettings.$.name': 1, _id: 0 } }
);