Meteor MongoDB返回单个对象

时间:2017-12-04 05:06:49

标签: mongodb meteor

{
    "_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" } } } );

然而,这将返回整个文档,而不是那个特定的对象,不知道我在这里做错了什么。

3 个答案:

答案 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 } }
       );