【问题标题】:How to fetch the subarray values in object如何获取对象中的子数组值
【发布时间】:2017-09-29 22:50:44
【问题描述】:

我在 mongodb 中使用嵌套集合。我正在通过 angularjs 从 mongodb 获取所有数据。

我的代码如下所示

       $http.get('/Unitget').then(function (response) {
        UnitDetails = $scope.UnitDetails  = response.data;
        UnitDetails.forEach(function (element) {
         var c = element.Beds_Details;  // test purpose
           type1_Bed += element.Beds_Details[0].type1_Bed ;
           type2_Bed += element.Beds_Details[0].type2_Bed ;
           type3_Bed += element.Beds_Details[0].type3_Bed ;
           type4_Bed += element.Beds_Details[0].type4_Bed ;
           type5_Bed += element.Beds_Details[0].type5_Bed ;
    }
    }

但是,如果我删除了 "[0]",那么这里的 element.Beds_Details[0].type1_Bed 不会获得任何值,那么它会显示 undefined。如果我将 Beds_Details 分配给另一个变量,它将正确分配为对象。

我的收藏样本记录如下

    "UnitId": "59225fd86ea6863028aba8b1",    //unique id
    "UnitName": "Hospital",
    "UnitIcon": "./upload/file-1493206621849.png",
    "FloorId": "592254b16ea6863028aba7e2",   // unique id of another collection
    "Material_Stream_Flow_Details": [
        {
            "Stream_Flow_DetailsID": "3",
            "fa": "590042c06ea6863028aba777", 
            "fb": "590042c06ea6863028aba777",
            "fc": "590042c06ea6863028aba777",
            "fd": "590042c06ea6863028aba777",
            "fe": "590042c06ea6863028aba777",
            "ff": "590042c06ea6863028aba777",
            "_id": ObjectId("59006a8d6ea6863028aba8cb")
        }
    ],
    "Destination_Details": [
        {
            "Elevator_ID": "2",
            "Elevator": "590042c06ea6863028aba777",
            "One_way": 42.6,
            "Round_Trip": 21.3,
            "_id": ObjectId("59006a8d6ea6863028aba8cc")
        }
    ],
    "Beds_Details": [
        {
            "Beds_DetailsID": "1",
            "type1_Bed": 0,
            "type2_Bed": 0,
            "type3_Bed": 0,
            "type4_Bed": 0,
            "type5_Bed": 0,
            "type6_Bed": 0,
            "_id": ObjectId("59006a8d6ea6863028aba8cd")
        }
    ]

如何获取嵌套集合中的值。

【问题讨论】:

    标签: javascript angularjs mongodb


    【解决方案1】:

    您可以迭代Beds_Details数组并将keyvalues推入另一个数组。请根据您的要求修改数组。我正在使用以下模式来创建新对象:

    {
        type: key,
        value: value
    }
    

    我正在使用 JQuery $.each 方法进行迭代。 Angular 也有类似的方法:

    var arr = [];
    angular.forEach(json, function(value, key) {
        arr.push({
            type: key,
            value: value
        });
    });
    

    演示 https://jsfiddle.net/sumitridhal/j3m2h4r0/6/

    JS

    var jsonObj ={ "UnitId": "59225fd86ea6863028aba8b1",    
        "UnitName": "Hospital",
        "UnitIcon": "./upload/file-1493206621849.png",
        "FloorId": "592254b16ea6863028aba7e2",   
        "Material_Stream_Flow_Details": [
            {
                "Stream_Flow_DetailsID": "3",
                "fa": "590042c06ea6863028aba777", 
                "fb": "590042c06ea6863028aba777",
                "fc": "590042c06ea6863028aba777",
                "fd": "590042c06ea6863028aba777",
                "fe": "590042c06ea6863028aba777",
                "ff": "590042c06ea6863028aba777"
            }
        ],
        "Destination_Details": [
            {
                "Elevator_ID": "2",
                "Elevator": "590042c06ea6863028aba777",
                "One_way": 42.6,
                "Round_Trip": 21.3
            }
        ],
        "Beds_Details": [
            {
                "Beds_DetailsID": "1",
                "type1_Bed": 0,
                "type2_Bed": 0,
                "type3_Bed": 0,
                "type4_Bed": 0,
                "type5_Bed": 0,
                "type6_Bed": 0,
                "_id": "59006a8d6ea6863028aba8cd"
            }
        ]};
    
    let json = jsonObj.Beds_Details[0];
    delete json['Beds_DetailsID'];
    delete json['_id']; // Removes Beds_DetailsID & _id
    
    var arr = [];
    $.each(json, function(key, value){
        arr.push({
            type: key,
            value: value
        });
    });
    

    【讨论】:

    • 这里我们删除了_id。有可能在没有服务器的这些变量的情况下获得。我使用普通的猫鼬查询作为collection.find({},function (err, docs) { res.json(docs); });
    • 您需要为此定义架构。保持_id : falsevar subSchema = mongoose.Schema({ //your subschema content },{ _id : false }); var schema = mongoose.Schema({ // schema content subSchemaCollection : [subSchema] });
    • 我是在查询时询问,但不是在创建时询问。
    • 他正在将Name : 'Sample' 属性从一个对象添加到另一个对象。
    猜你喜欢
    • 2019-10-01
    • 2020-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    相关资源
    最近更新 更多