Sad*_*san 33 mongodb mongodb-query
我是使用CakePHP在MongoDB中更新的.
当我写下面的查询时,它会执行得很好.
db.testData.find()
{
"_id" : ObjectId("53d1f79db8173a625961ff3d"),
"name" : "sadikhasan",
"created" : ISODate("2014-07-25T06:22:21.701Z")
}
Run Code Online (Sandbox Code Playgroud)
当我运行以下查询只获取名称但它显示错误时
db.testData.find({},{name:1, created:0})
error: {
"$err" : "Can't canonicalize query: BadValue Projection cannot
have a mix of inclusion and exclusion.",
"code" : 17287
}
Run Code Online (Sandbox Code Playgroud)
当我运行以下查询以获取只有名称时,name它执行良好.
db.testData.find({},{name:1, _id:0})
{ "name" : "sadikhasan" }
Run Code Online (Sandbox Code Playgroud)
我的qeustion是我name在投影列表中写错误的原因.提前感谢您的帮助.
Nei*_*unn 67
你不能混合包含和排除,唯一的例外是该_id字段.
例如,如果你有这个:
{
"_id": ObjectId("53d1fd30bdcf7d52c0d217de"),
"name": "bill",
"birthdate": ISODate("2014-07-80T00:00:00.000Z"),
"created": ISODate("2014-07-25T06:44:38.641Z")
}
Run Code Online (Sandbox Code Playgroud)
如果你想要的只是"名字"和"生日",你需要这样做:
db.collection.find({},{ "_id": 0, "name": 1, "birthdate": 1 })
Run Code Online (Sandbox Code Playgroud)
或这个:
db.collection.find({},{ "_id": 0, "created": 0 })
Run Code Online (Sandbox Code Playgroud)
但是不允许"混合"除"_id"之外的任何其他操作
db.collection.find({},{ "_id": 0, "name": 1, "created": 0 })
Run Code Online (Sandbox Code Playgroud)
这也会产生错误.
这些都包含在手册页中.
小智 5
它引发错误“无法规范化查询:BadValue Projection无法混合包含和排除。” 因为您要同时包含和排除内容。1表示包含,0表示排除。您可以在查询中使用0或1。因此,如果您只想看到_id和name字段,则use可以使用:1)包含:
db.testdata.find({}, {_id:1,name:1})
Run Code Online (Sandbox Code Playgroud)
或2)排除:
db.testdata.find({},{created:0})
Run Code Online (Sandbox Code Playgroud)
在上述两种情况下,它将仅显示_id和name字段。