当字段不存在或此字段的子字段满足某些条件时,我需要找到一个文档。
此处提出了类似的问题:Mongodb query - apply condition only if field exists。我将使用此答案中的代码来说明:
db.stackoverflow.find({
$or: [
{ howmuch: { $exists:false } },
{ 'howmuch.chocolate':5 }
]})
当然,当我这样做时,howmuch
未定义时会出错。我知道我可以测试'howmuch.chocolate'
是否存在,但这不会改变任何东西。有没有办法做到这一点?
答案 0 :(得分:3)
这应该有效:
db.stackoverflow.find({
$or: [
{ howmuch: { $exists:false } },
{ $and: [{ 'howmuch.chocolate': { $exists: true } } ,{ 'howmuch.chocolate':5 }]}
]})
根据documentation,如果$and
数组中的第一个表达式求值为false,则不评估其余表达式。