1

如何查询字段为空或未定义的文档?

例如

{id:1, updatedAt: null}
{id:2}

我已经尝试过这段代码无济于事。返回 0 个匹配项。

const whereBuilder = new WhereBuilder();
const where: Where = whereBuilder
  .eq('updatedAt', null)
//.eq('updatedAt', false)
  .build();

myRepository.findOne({
  where: where,
});

谢谢您的帮助!

编辑 1:模型上的字段声明。

@property({
  type: 'date',
})
updatedAt?: string;
4

1 回答 1

1

在 MongoDB 外壳中

使用$type运算符来匹配undefined值,请参阅this

// match `undefined`
db.TEST.findOne({ updatedAt: {'$type':6}  });
// match `null`
db.TEST.findOne({ updatedAt: null  });

在 LB4

// match `undefined`
return await this.myRepository.find(
    {
        where: {
            // !!!! "$" will be added automatically here. (explained below)
            updatedAt: { 'type': 6 }
        },
    }
);
// match `null`
return await this.myRepository.find(
    {
        where: {
            updatedAt: null
        },
    }
);

为什么{ 'type': 6 }会转换成{ '$type': 6 }?

./node_modules/loopback-connector-mongodb/lib/mongodb.js第 918 行:

where将在这个函数中被重构

MongoDB.prototype.buildWhere = function(modelName, where, options) {
    ...

并在第 1011 行,{ 'type': 6 }将转换为{ '$type': 6 }

   ...
      } else {
        query[k] = {};
        query[k]['$' + spec] = cond;
      }
   ...

顺便说一句,在第 1016 行,您可以看到null将转换为{$type: 10}

   ...
      if (cond === null) {
        // http://docs.mongodb.org/manual/reference/operator/query/type/
        // Null: 10
        query[k] = {$type: 10};
      } else {
   ...

于 2019-08-31T11:01:24.670 回答