代码之家  ›  专栏  ›  技术社区  ›  Kirataka

如何在MongoDB中获取嵌套值?

  •  0
  • Kirataka  · 技术社区  · 6 年前

    {
    "_id" : ObjectId("5b5acaf0589ff6bfb5dd091f"),
    "date" : "2018/07/31",
    "clock" : [ 
        {
            "time" : "10:12:02",
            "values" : [ 
                {
                    "name" : "A1003",
                    "value" : "777"
                }, 
                {
                    "name" : "A0001",
                    "value" : "888"
                }
            ]
        }, 
        {
            "time" : "13:12:02",
            "values" : [ 
                {
                    "name" : "A1003",
                    "value" : "111"
                }
            ]
        }
    ]
    }
    

    我可以用 $gte $lte

    getData(name: string[], fromDate: string, toDate: string): Promise<{ message: string }> {
        return this._mongoUtility.testDb
            .then(db => {
                let collection = db.collection('TestDoc');
                let fromOnlyDate = fromDate.split(' ');
                let toOnlyDate = toDate.split(' ');
                return collection.find({
                    'date': {
                        $gte: `${fromOnlyDate[0]}`,
                        $lte: `${toOnlyDate[1]}`
                    }
                }).toArray();
            })
            .catch(err => {
                return Promise.reject({message: 'Data not found', err: err})
            })
    }
    

    我想用 time 再一次 name 并且应该显示 value

    我试了很多方法,但我正在得到结果。在MongoDB中有没有其他方法可以做到这一点?敬请建议。

    0:{date: "2018/07/31 10:12:02", value-A1003: "777", value-A0001: "888"}
    1:{date: "2018/07/31 13:12:02", value-A1003: "111"}
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Amit Wagner    6 年前

    您可以使用聚合框架来获得simmler结果(不能按值创建attr)

    db.getCollection('sss').aggregate([
    
        {$unwind:'$clock'},
        {$unwind:'$clock.values'},
        {$project:{
             date: {$concat:[  "$date" ,' ' ,  "$clock.time" ]},
             value:'$clock.values.value',
             name:'$clock.values.name'
         }}
    
    ])