【问题标题】:Query for field being null or a specific type查询字段为空或特定类型
【发布时间】:2017-04-28 01:40:25
【问题描述】:

我正在尝试使用the $type operator 编写查询以匹配可能具有'null''objectid' 类型的字段。当我只查询一种特定类型时,它可以工作:

> db.collections.post.findOne({$or: [{x: {$type: 'null'}}]}).then(console.log)
Promise { <pending> }
> { _id: 584f573f931f2b0bf4e3d339,
  date: Mon Dec 12 2016 21:04:47 GMT-0500 (Eastern Standard Time),
  title: 'hgfgh',
  text: 'dhffgh',
  userId: 584f573a931f2b0bf4e3d338,
  x: null }

当我编写一个查询同时匹配 xobjectid 时,我什么也得不到:

> db.collections.post.findOne({$or: [{x: {$type: 'null'}}, {x: {$type: 'objectid'}}]}).then(console.log)
Promise { <pending> }

我正在使用 node-mongodb-native-2.2。

如果字段是nullObjectId,我如何编写一个匹配的查询(我希望为验证器编写这个)?

【问题讨论】:

  • 你可以试试 {$or: [{x: {$type: 'null'}}, {x: {$type: 'objectId'}}]} 在对象 id 中使用大写 I 吗?
  • 就是这样。这让我觉得自己很愚蠢xD。虽然我真的很想责怪 mongo 的查询,因为它没有将其视为错误并引发异常:-p。

标签: node.js mongodb mongodb-query


【解决方案1】:

我使用的方法显然是正确的,只是我将'objectId'(参见“Available Types”)拼错为'objectid'。正确拼写类型名称会导致 mongodb 决定将查询解释为查询而不是字段匹配。

我对发生在我身上的事情的理论是,mongodb 放弃了将我的查询强制为“查询”的尝试,而是将其视为对象键匹配。我不确定如何避免这种情况,或者是否有办法让 mongodb 在无法解释 $type 时引发错误,而不是默默地改变它解释查询的方式。

编辑:啊,我还发现 mongodb 试图告诉我我的语法不好。我只是没有在我的Promise 上添加.catch()。哎呀……

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-26
    • 1970-01-01
    • 2021-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    相关资源
    最近更新 更多