我正试图使用mongoose查询过度填充的子属性,但它直接不起作用,并且会一直返回空数组。
即使将权限和现有信息硬编码为查询的值,也会返回空数组。
我的模式是一个业务模式,通过属性createdBy与用户模式有1比1的关系。用户模式有一个属性名称,我正试图查询它。
所以如果我做这样的查询:
business.find({'createdBy.name': {$regex:"steve"}}).populate('createdBy')
上述人员将永远不会归还任何文件。尽管没有find条件,一切都很好。
我是否可以按填充的子项中的名称进行搜索?所有的教程都说这应该很好用,但事实并非如此。
编辑:记录的一个例子:
{
"_id": "5fddedd00e8a7e069085964f",
"status": 6,
"addInfo": "",
"descProduit": "",
"createdBy": {
"_id": "5f99b1bea9ba194dec3bd6aa",
"status": 1,
"fcmtokens": [
],
"emailVerified": 1,
"phoneVerified": 0,
"userType": "User",
"name": "steve buschemi",
"firstName": "steve",
"lastName": "buschemi",
"tel": "",
"email": "steve@buschemi.com",
"register_token": "747f1e1e8fa1ecd2f1797bb402563198",
"createdAt": "2020-10-28T18:00:30.814Z",
"updatedAt": "2020-12-18T13:52:07.430Z",
"__v": 19,
"business": "5f99b1e101bfff39a8259457",
"credit": 635,
},
"createdAt": "2020-12-19T12:10:57.703Z",
"updatedAt": "2020-12-19T12:11:16.538Z",
"__v": 0,
"nid": "187"
}
似乎没有办法通过子文档上的条件来过滤父文档:
来自官方文件:
通常,没有办法使populate((根据故事作者的属性过滤故事。例如,即使填充了author,下面的查询也不会返回任何结果。
const story = await Story.
findOne({ 'author.name': 'Ian Fleming' }).
populate('author').
exec();
story; // null
如果你想按作者的名字过滤故事,你应该使用反规范化。