2017-04-12 85 views
1

我试图通过用户ID和所选字段和项目找到我的数据库文档的特定条目。我希望项目对象被返回。这是文档结构:Mongodb findOne对象按ID排列

{ 
"_id": ObjectId("58edfea4b27fd0547375eeb4"), 
"user_id": ObjectId("58d2dd4c8207c28149dbc748"), 
"calories": 2000, 
"date": 20170312, 
"snacks": [ ], 
"dinner": [ 
{ 
    "nutrients": { 
    "protein": "11.6", 
    "carbs": "29.4", 
    "fat": "7.9" 
    }, 
    "servings": "75", 
    "calories": 750, 
    "name": "Meat feast stone baked pizza" 
}, 
{ 
    "nutrients": { 
    "protein": "6.8", 
    "carbs": "54", 
    "fat": "30.6" 
    }, 
    "servings": "25", 
    "calories": 550, 
    "name": "Mc Coy's Cheddar and onion" 
}], 
"lunch": [], 
"breakfast": [], 
} 

我做了什么至今获得用户ID,日期,然后选择餐和项目搜索。即时获取返回的是整个膳食数组,但我只想要食物项目对象返回。

user_food.findOne({user_id : req.session.user_id, date: today},{'dinner': 'Meat feast stone baked pizza'},function(err, item){ 
     if(err){ 
      console.log("something went wrong: " + err); 
      return res.status(500).send(err); 
     } 
     else{ 
      console.log(item); 
      return res.status(200).send(item); 
     } 
    }); 

被退回什么IM是这样的:

"dinner": [ 
{ 
    "nutrients": { 
    "protein": "11.6", 
    "carbs": "29.4", 
    "fat": "7.9" 
    }, 
    "servings": "75", 
    "calories": 750, 
    "name": "Meat feast stone baked pizza" 
}, 
{ 
    "nutrients": { 
    "protein": "6.8", 
    "carbs": "54", 
    "fat": "30.6" 
    }, 
    "servings": "25", 
    "calories": 550, 
    "name": "Mc Coy's Cheddar and onion" 
}] 

我要的是简单的:

{ 
    "nutrients": { 
    "protein": "11.6", 
    "carbs": "29.4", 
    "fat": "7.9" 
    }, 
    "servings": "75", 
    "calories": 750, 
    "name": "Meat feast stone baked pizza" 
} 

回答

3

试试这个:

user_food. 
findOne({ 
     user_id : req.session.user_id, 
     date: today, 
     'dinner.name': 'Meat feast stone baked pizza' 
    },{ 
     'dinner.$' : 1 
},function(err, item){ 
    .... 
}); 

dinner.$将只返回晚餐物品垫ch的标准,即在哪里dinner.name : Meat feast stone baked pizza

阅读关于$(positional) operator了解更多有关从查询结果限制数组内容以及返回匹配查询文档的元素的信息。

+1

谢谢你亲切的陌生人。是的,这正是我需要的。与MySQL风格查询相比,Mongodb很难学习。我会给位置操作员一个阅读。 再次感谢 –