我有一个具有以下结构的集合:
{
_id
someParamA,
someParamB,
someParamC: {
nestedParamA,
nestedParamB,
nestedParamC,
}
}
我想做的是查询数据库,并返回所有具有someParamC视图不同值之一的记录。
例如,查询将类似于:
其中(someParamC:{nestedParamA:1,nestedParamB:1,nestedParamC:1})或(someParamC:{nestedParamA:1,nestedParamB:1,nestedParamC:2}
我已经用以下代码尝试过此操作:
Collection.find().or([{someParamC: {...}}, {someParamC: {...}}]
每条猫鼬的调试消息会产生如下查询:
{
"dbQuery": {
"coll": "collectionName","method":"find","query": {"$or":[{"someParamC":{...}},{"someParamC":{...}]},"doc":{"sort":{"updatedAt":-1},"projection":{}}
}
}
这正是我所期望的。即使馆藏有多个匹配的文档,Mongoose总是返回[]。
我也曾尝试将过滤器放在{fin或{}的.find()方法中无济于事。当调用.findOne()时,这一切也都失败了。我在这里做错什么了吗?我的特定代码,收集和日志记录如下:
cacheResult = await resultsCollection.find()
.or(<array of parameters, see below>)
.sort({ updatedAt: -1 });
参数数组如下:
[
{
"requestParameters":{
"action":"product",
"domainId":1,
"ASIN":"B0763ZCH7K",
"offers":true,
"rating":true
}
},
{
"requestParameters":{
"action":"product",
"domainId":1,
"ASIN":"B0763ZCH7K",
"offers":true,
"rating":false
}
},
{
"requestParameters":{
"action":"product",
"domainId":1,
"ASIN":"B0763ZCH7K",
"offers":false,
"rating":true
}
},
{
"requestParameters":{
"action":"product",
"domainId":1,
"ASIN":"B0763ZCH7K",
"offers":false,
"rating":false
}
}
]
哪个生成此请求(猫鼬调试信息):
{
"dbQuery":{
"coll":"public.keepas",
"method":"find",
"query":{
"$or":[
{
"requestParameters":{
"action":"product",
"domainId":1,
"ASIN":"B0763ZCH7K",
"offers":true,
"rating":true
}
},
{
"requestParameters":{
"action":"product",
"domainId":1,
"ASIN":"B0763ZCH7K",
"offers":true,
"rating":false
}
},
{
"requestParameters":{
"action":"product",
"domainId":1,
"ASIN":"B0763ZCH7K",
"offers":false,
"rating":true
}
},
{
"requestParameters":{
"action":"product",
"domainId":1,
"ASIN":"B0763ZCH7K",
"offers":false,
"rating":false
}
}
]
},
"doc":{
"sort":{
"updatedAt":-1
},
"projection":{
}
}
}
}
哪一个返回[],即使这在数据库中: Screen shot of some DB records that should match
非常感谢您的帮助!
答案 0 :(得分:0)
使用猫鼬,我为一个带有未定义参数的OR子句传递了一个对象。尽管此参数没有出现在Mongoose调试输出中(即,它根本没有包含在查询字符串中),但删除该参数可以神奇地解决了该问题,并且查询现在可以按预期运行。