我收集了“群组”。像这样:
{
"_id" : "e9sc7ogDp8pwY2uSX",
"groupName" : "one",
"creator" : "KPi9JwvEohKJsFyL4",
"eventDate" : "",
"isEvent" : true,
"eventStatus" : "Event announced",
"user" : [
{
"id" : "xfaAjgcSpSeGdmBuv",
"username" : "1@gmail.com",
"email" : "1@gmail.com",
"order" : [ ],
"price" : [ ],
"confirm" : false,
"complete" : false,
"emailText" : ""
},
...
],
...
"buyingStatus" : false,
"emailTextConfirmOrder" : " With love, your Pizzaday!! "
}
如何获取特定元素的值?例如,我需要获得特定组和特定用户的“Groups.user.confirm”值。
我试过在methods.js
中这样做'pizzaDay.user.confirm': function(thisGroupeId, thisUser){
return Groups.find({ _id: thisGroupeId },{"user": ""},{"id": thisUser}).confirm
},
但它什么也没有返回。
即使在mongo控制台中,我也可以使用
获取用户数组db.groups.findOne({ _id: "e9sc7ogDp8pwY2uSX"},{"user": ""})
整个代码是github http://github.com/sysstas/pizzaday2
答案 0 :(得分:0)
尝试以下查询: -
db.groups.aggregate(
[
{
$match:
{
_id: thisGroupeId,
"user.id": thisUser
}
},
{
$project:
{
groupName : 1,
//Add other fields of `user` level, if want to project those as well.
user:
{
"$setDifference":
[{
"$map":
{
"input": "$user",
"as": "o",
"in":
{
$eq : ["$$o.id" , thisUser] //Updated here
}
}
},[false]
]
}
}
}
]);
上述查询将在$match
数组内的user
中提供与查询匹配的对象。现在,您可以访问该特定对象所需的任何字段。
答案 1 :(得分:0)
'pizzaDay.user.confirm':function(){ return Groups.findOne({_ id:thisGroupeId})。user.confirm;
答案 2 :(得分:0)
我用这个解决了它:
Template.Pizzaday.helpers({
confirm: function(){
let isConfirm = Groups.findOne(
{_id: Session.get("idgroupe")}).user.filter(
function(v){
return v.id === Meteor.userId();
})[0].confirm;
return isConfirm;
},
});
但我仍然认为有一些很优雅的方法可以做到这一点。