如果它是多维数组或对象或两者,如何从Meteor中的集合中获取元素?

时间:2016-06-06 05:45:50

标签: javascript arrays mongodb meteor

我收集了“群组”。像这样:

{
    "_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

3 个答案:

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

但我仍然认为有一些很优雅的方法可以做到这一点。