collection.find在子数组中的项目上

时间:2015-08-21 17:21:26

标签: node.js mongodb

我有以下对象结构:

[
  { 
     name: "someThing"
     ,securities: [ {"id": "2241926"} ]
  }
]

我希望能够返回外部数组中的所有对象,这些对象至少有一个具有以值开头的id的子secuirty。我已经尝试了一些事情,并继续做空。在mongoo控制台上,此查询有效:

db.caseSummary.find({"securities.id": /^224.*/i})

我们正在使用ES6,所以请为生成器语法道歉:

const q = require("q");

const startsWith = function(term){
    return new RegExp('^' + term + '.*', 'i')
}

const find = function*(collection, criteria){
    const command = q.nbind(collection.find, collection),
        myCriteria = criteria || {},
        results = yield command(myCriteria),
        toArray = q.nbind(results.toArray, results) ;

    return yield toArray()
}

const searchBySecurity = function*(mongo, term) {
  const collection = mongo.collection("caseSummary"),
      criteria = {"securities.id": startsWith(term) };

  return yield find(collection, criteria);
}

所以 searchBySecurity(this.mongo,' 224')它返回一个空数组,它应该返回与mongo控制台相同的结果。我想我错过了一个非常基本的概念,在翻译我的搜索条件或调用find 在原始mongo控制台查询的节点中写这个。

编辑1:要清楚我想要返回所有父对象,这些对象的子数组包含一个以传入的术语开头的值......

编辑2:

我将标准更改为:

  criteria = { "securities": {
      "$elemMatch": {
          "id": "901774109" //common.startsWith(term)
      }
    }
  };

结果仍然相同。

编辑3:

使用nodejs - mongodb"版本":" 1.4.38"

编辑4:

这最终不是问题

0 个答案:

没有答案