如何使用MongoDB的$eq与$cond操作符替换gender字段值
解决MongoDB聚合中用$cond替换gender字段的问题
嘿,你写的聚合查询没法正常工作,问题出在**$cond操作符的语法**上——你在if字段里错误地嵌套了一个{"gender": ...}的对象,这不符合MongoDB的$cond语法规范~
给你修正后的两种可行写法:
写法一:使用$cond的对象语法
这种写法可读性更强,适合新手:
db.contacts.aggregate([ { $project: { _id: 0, age: 1, name: 1, gender: { $cond: { if: { $eq: ["$gender", "male"] }, // 直接写匹配条件,不用套gender键 then: "H", else: "F" } } } } ])
写法二:使用$cond的数组语法(更简洁)
如果喜欢更紧凑的代码,也可以用数组形式的$cond,顺序是[条件表达式, 满足条件时的值, 不满足时的值]:
db.contacts.aggregate([ { $project: { _id: 0, age: 1, name: 1, gender: { $cond: [{ $eq: ["$gender", "male"] }, "H", "F"] } } } ])
额外小提示
上面的写法会把所有非"male"的gender值都替换成"F",如果数据库里可能存在其他gender值(比如未知、自定义值),不想强制替换的话,可以嵌套$cond做更严谨的判断:
db.contacts.aggregate([ { $project: { _id: 0, age: 1, name: 1, gender: { $cond: [ { $eq: ["$gender", "male"] }, "H", { $cond: [ { $eq: ["$gender", "female"] }, "F", "$gender" ] } // 非男非女时保留原字段值 ] } } } ])
内容的提问来源于stack exchange,提问作者scandll
相关产品推荐
相关产品推荐

