我正在使用MongoDB Atlas服务器…并且遇到了这个错误…是什么意思?谁能简单地解释一下吗?
这是我正在尝试的查询…
db.posts.find({}, {title: 1, date: 0})
数据库中帖子的结构如下:
[
{
_id: ObjectId("63739044de169f6d0h2e6a3d"),
title: 'Post 2',
body: 'a news post',
category: 'News',
likes: 1,
tags: [ 'news', 'events' ],
date: 'Tue Nov 15 2022 18:53:24 GMT+0530 (India Standard Time)'
},
{
_id: ObjectId("63739271de179f5d0e31e5b2"),
title: 'Post 1',
body: 'hey there, hemant here',
category: 'random',
likes: 1,
tags: [ 'random', 'events' ],
date: 'Tue Nov 15 2022 18:41:24 GMT+0530 (India Standard Time)'
}
]
但是我得到一个错误,说…
MongoServerError: Cannot do exclusion on field date in inclusion projection
我试图获得所有的文档对象,不包括日期参数和包括标题参数,但得到一个错误…
根据文档,find
中的第一个参数是filter,第二个参数是projection
。projection
允许指定要返回的字段。_id
是您需要在投影中明确排除的唯一字段。对于所有其他字段,您只需要说明包含内容。您必须遵循以下格式:
db.posts.find({}, {title: 1, body:1, category:1, likes:1, tags:1})
另一种可能性是
在'posts'猫鼬模式中,如果我们像这样设置日期键
date: {
type: string,
select: true
}
select:true
总是在所有查找查询中返回日期键
和传递{date:0}
在投影或dot_select(.select)
对象将返回这个错误:
不能排除包含投影中的字段日期
这是一个简单的错误,我将向您展示如何修复。你需要了解投影是如何工作的。但首先,让我们看看find()方法是如何工作的。find()方法可以接受两个参数,它们是1。过滤器和2。投影。有两种类型的投影:1。包含投影和2。排除投影。
- 包含投影表示指定查询文档结果中要包含的所有字段。这是通过将需要包含在作为find方法第二个参数传递的对象中的所有键值赋值1来实现的。注意,只有"_id"> 在进行包含投影时,可添加排除键。
您可以这样做来对post collection上的title字段执行包含投影:
db.posts.find({}, {"title": 1})
或
db.posts.find({}, {"title": 1, "_id": 0})
,结果将是:
[
{
title: 'Post 1'
},
{
title: 'Post 2'
}
]
- 排除投影表示在查询文档的结果中指定要排除的所有字段。这是通过将在作为find方法的第二个参数传递的对象中排除的所有键值赋值为0来实现的。要使用排除投影获得与上面的包含投影相同的结果,您可以这样做:
db.posts.find({}, {"_id": 0, "body":0, "category":0, "likes":0, "tags":0, "date":0})
,结果将是:
[
{
title: 'Post 1'
},
{
title: 'Post 2'
}
]
感谢您的阅读。我希望这能让你对投影有一个深刻的理解。
这有点晚了,但这里有一些东西可以帮助您获得除日期以外的所有内容:
db.posts.find({}, {date: 0})