查询Mongo数据库

时间:2017-07-28 12:07:28

标签: node.js mongodb

我需要对我的mongo数据库中的以下条目执行查询:

 {
    "_id" : ObjectId("597b19512a5b1c3258e6440e"),
    "fdata" : [
            {
                    "type" : "header",
                    "subtype" : "h1",
                    "label" : "Date Of Commencement"
            },
            {
                    "type" : "paragraph",
                    "subtype" : "p",
                    "label" : "The partnership business shall be deemed to have commenced on and from :"
            },
            {
                    "type" : "date",
                    "label" : "Date Field",
                    "description" : "Enter correct date as per instructions in the clause",
                    "className" : "form-control",
                    "name" : "date-1501239537753"
            },
            {
                    "type" : "button",
                    "subtype" : "submit",
                    "label" : "Next",
                    "className" : "btn btn-primary",
                    "name" : "button-1501239595350",
                    "style" : "primary"
            }
    ]
} 

我必须获取名为 fdata 的整个数组,而我可用的参数是名为 cl 的数组中标签的值这样:

cl = ['Date Of Commencement'];

我的问题是如何访问该数组条目,因为以下代码为我提供了“意外令牌”

我的查询是这样的:(在后端使用NodeJS)

    for(var i=0; i<cl.length ;i++) {

        var dummy = cl[i];

        //console.log(dummy);

        result[i] = db.collection('clauses').findOne({fdata[0].label: dummy},{fdata});
    }

它处于循环中,因为在大多数情况下,数组 cl 将有多个条目。

1 个答案:

答案 0 :(得分:0)

您正在使用的findOne查询是异步的。这就是您看到[ Promise { <pending> } ]的原因。 有很多方法可以处理异步行为:

  • 回调
  • async library
  • 承诺
  • generator + coroutines
  • async + await

如果您的Nodejs版本足够新(8+),它应该支持异步/等待方法。

async function doJob(arr) {
  const clauses = db.collection('clauses');

  for (const key of arr) {
    const result = await clauses.findOne({'fdata.label': key});
    console.log(result);
  }
}