我有以下对象结构:
[
{
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:
这最终不是问题