Mongodb查询 - 仅在字段存在时将条件应用于子字段

时间:2016-06-08 08:33:05

标签: mongodb

当字段不存在或此字段的子字段满足某些条件时,我需要找到一个文档。

此处提出了类似的问题:Mongodb query - apply condition only if field exists。我将使用此答案中的代码来说明:

db.stackoverflow.find({
  $or: [
    { howmuch: { $exists:false } },
    { 'howmuch.chocolate':5 }
  ]})

当然,当我这样做时,howmuch未定义时会出错。我知道我可以测试'howmuch.chocolate'是否存在,但这不会改变任何东西。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:3)

这应该有效:

db.stackoverflow.find({
  $or: [
    { howmuch: { $exists:false } },
    { $and: [{ 'howmuch.chocolate': { $exists: true } } ,{ 'howmuch.chocolate':5 }]}
  ]})

根据documentation,如果$and数组中的第一个表达式求值为false,则不评估其余表达式。