英文:
MongoDB aggregate $match stage with conditional query
问题
我想在MongoDB聚合中进行匹配阶段,在此匹配中,我想检查是否存在条件,使用自定义查询,如果不存在,则使用另一个自定义查询。这些自定义查询是嵌套字段。
在搜索和阅读文档后,我编写了这段代码。但是它出现了一个错误。
我使用的是MongoDB v4.4版本。只能使用这个版本,不能切换到其他版本。
MongoError:FieldPath字段名称不能包含'.'。
{
$match : {
$expr : {
$cond : {
if: { $eq : [ 'type' , 'country'] },
then: {
$and : [
{ 'countryState.status' : 'Confirmed' },
{ 'countryState.prop' : 'high' },
]
},
else: { },
}
}
}
},
如果'type'字段等于'country',我想使用自定义查询,如果不是,则只使用{}查询。
我将不胜感激,如果有人可以帮我,告诉我如何使用带有条件查询的匹配阶段。
英文:
I want to do a match stage in mongoDB aggregate, and in this match I want to check if a condition exists, use a custom query, and if not, use another custom query. The custom queries are nested fields.
after searching and reading documents , I write this code. But it has an error.
I use MongoDB v4.4 . only this version and cannot switch to other versions.
MongoError: FieldPath field names may not contain '.'.
{
$match : {
$expr : {
$cond : {
if: { $eq : [ 'type' , 'country'] },
then: {
$and : [
{ 'countryState.status' : 'Confirmed' },
{ 'countryState.prop' : 'high' },
]
},
else: { },
}
}
}
},
If the 'type' field, is equal to country, I want to use the custom query, and if not, only {} query.
I would appreciate anyone can help me, how to this match stage with conditional query.
答案1
得分: 3
您正在要求查询返回"这个或那个",因此我们应该使用 $or
。借用了 @cmgchess 游乐场链接中的示例数据,我相信以下查询应该在逻辑上实现您想要的功能:
db.collection.aggregate([
{
$match: {
$or: [
{
"type": "country",
"countryState.status": "Confirmed",
"countryState.prop": "high"
},
{
"type": {
$ne: "country"
}
}
]
}
}
])
英文:
You are asking for the query to return "this or that", so we should use $or
. Borrowing the sample data from @cmgchess playground link, this query should logically do what you want I believe:
db.collection.aggregate([
{
$match: {
$or: [
{
"type": "country",
"countryState.status": "Confirmed",
"countryState.prop": "high"
},
{
"type": {
$ne: "country"
}
}
]
}
}
])
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论