即使在指定字段后,MongoDB也会返回所有记录

时间:2013-10-03 13:09:50

标签: mongodb meteor mongodb-query

> db.checklistDB.find({},{title:1, _id:0})
{ "title" : "Untitled Checklist" }
{  }
{  }
{  }
{  }
{  }
> db.checklistDB.find({},{title:1})
{ "title" : "Untitled Checklist", "_id" : "4FaJcAkzAY3Geyggm" }
{ "_id" : "3imNYy8SPcRDjLcqz" }
{ "_id" : "977fPtvEn7hiStqzp" }
{ "_id" : "QcAEMnr6R7qfaWFR8" }
{ "_id" : "eEsmKMdQGYKqnhTNB" }
{ "_id" : "cL6R8qxwWhvTr2kmy" }

嗨,大家好,

从上面可以看出,我发出了两个命令:

db.checklistDB.find({},{title:1})和 * db.checklistDB.find({},{title:1,_id:0})

两个查询都返回6条记录,这些记录是数据库中存在的所有记录。我想它只会返回有“标题”作为字段的记录。有什么我做错了吗?

1 个答案:

答案 0 :(得分:2)

查找的第二个参数是投影。在您的情况下,它会在文档中查找title字段,如果它不存在,则返回none。如果要过滤文档,则应使用以下查询:

 db.checklistDB.find({title: {$exists: true}}, {title:1, _id:0})

修改 如果您接受查询:

db.checklistDB.find({}, {title:1, _id:0})

它转换为:检索所有文档({}作为查询参数),如果存在则为每个文档提供title或默认值(none)如果不存在({title:1, _id:0} {1}}作为投影参数)。投影参数仅用于转换而不是过滤文档。