1
> 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" }

こんにちは、みんな、

上記からわかるように、2 つのコマンドを実行します。

db.checklistDB.find( {} , { title : 1 } ) および *db.checklistDB.find( {} , { title : 1 , _id : 0} )

どちらのクエリも、データベースに存在するすべてのレコードである 6 つのレコードを返します。フィールドとして「タイトル」を持つレコードのみが返されると思います。私が間違っていることはありますか?

4

1 に答える 1

3

find の 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}射影引数として) 与えます。プロジェクション引数は、ドキュメントをフィルタリングするためではなく、変換するためにのみ使用されます。

于 2013-10-03T13:18:55.040 に答える