通过在Mongodb中应用条件使用$ find查询嵌套对象

时间:2019-02-28 11:39:49

标签: node.js mongodb

这是我的json对象

{
"account_id" :  "1",
"sections" : [
    "name" : "sec1",
    "label" : {
        "label1" : "text1",
        "label2" : "text2"
        }
    },
    "name" : "sec2",
    "label" : {
        "label3" : "text3",
        "label4" : "text4",
        "label5" : "text5"
         }
    },       
]
}

因此在此json中,我想查询扇区= sec1的标签对象。我使用了下面的代码,但是没有用。

var getData = (db, query) => { 
  return db
    .collection(TABLE_NAME)
    .find(query, { account_id: { sections: { label: 1 } } })
    .toArrayAsync();
};

var dataList = (db, event) => {
  let dataQuery = {
     account_id: id,
     'sections.name': event.params.section
   };
  return getData(db, dataQuery);
};

module.exports.getData = (event, cb) => {
  return using(connectDatabase(), db => {
    return dataList (db, event);
   }).then(data => cb(null, responseObj(data, 200)), err => 
cb(responseObj(err, 500)));
};

有人可以帮我吗?谢谢。

2 个答案:

答案 0 :(得分:1)

尝试类似这样的方法。使用$project,我们可以有选择地删除或保留字段,并且可以重新分配现有字段值并导出全新的值。投影完标签名称后,执行$match以按名称提取文档。需要注意的一件事是,通过使用$project,它将自动分配文档的 _id

    var dataList = (db, event) => {
        return db
            .collection(TABLE_NAME)
            .aggregate([ 
              { 
                $match: { account_id: your_id } 
              },
              {
                $unwind: '$sections'
               },
              {
                $project:{labels:'$sections.label',name:'$sections.name'}
              },
               {
               $match:{name:section_name}
             }]).toArray();
          };

答案 1 :(得分:0)

您必须使用aggregate语法和$unwind方法来在对象数组中查找项目。

var dataList = (db, event) => {
    return db
        .collection(TABLE_NAME)
        .aggregate([
            {
                $match: {
                    account_id: id,
                }
            },
            { $unwind: "$comments" },
            {
                $match: {
                    'name': event.params.section
                }
            }
        ])
        .toArrayAsync();
};

结果:

[{
    "account_id": "1",
    "sections": {
        "name": "sec2",
        "label": {
            "label3": "text3",
            "label4": "text4",
            "label5": "text5"
        }
    }
}]