查找字段类型为字符串的记录

use*_*277 2 string field mongodb

我有这样的记录:

{id : 1 , price : 5}
{id : 2 , price : "6"}
{id : 3 , price : 13}
{id : 4 , price : "75"}
Run Code Online (Sandbox Code Playgroud)

我想构建一个查询,只记录价格类型为“string”的人

所以,它会得到:

{id : 2 , price : "6"}
{id : 4 , price : "75"}
Run Code Online (Sandbox Code Playgroud)

Joh*_*yHK 5

您可以使用$type查询运算符来执行此操作:

db.test.find({price: {$type: 2}})
Run Code Online (Sandbox Code Playgroud)

如果您使用的是 MongoDB 3.2+,您还可以对类型使用字符串别名:

db.test.find({price: {$type: 'string'}})
Run Code Online (Sandbox Code Playgroud)


Rub*_*oot 5

虽然 @JohnnyHK 的答案在大多数情况下是绝对正确的,但 MongoDB 还会返回文档,其中field是一个数组,并且该数组中的任何元素都具有该类型(docs)。例如,该文档

{ 
  _id: 1,
  tags: ['123']
}
Run Code Online (Sandbox Code Playgroud)

也会返回查询Books.find({ tags: { $type: "string" } })。为了防止这种情况,您可以将查询调整为

Books.find({
  tags: {
    $type: "string",
    $not: {
      $type: "array"
    }
  }
})
Run Code Online (Sandbox Code Playgroud)