我正在使用 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
中的第一个参数是过滤器,第二个是projection
。 projection
允许您指定要返回的字段。_id
是您需要在投影中显式排除的唯一字段。对于所有其他字段,您只需说明包含内容。您必须遵循以下格式。
db.posts.find({}, {title: 1, body:1, category:1, likes:1, tags:1})
还有一种可能是
在“帖子”猫鼬模式中, 如果我们像这样设置日期键
date: {
type: string,
select: true
}
select:true
在所有查找查询中始终返回日期键
并在投影或
{date:0}
对象中传递 dot_select(.select)
将返回此错误:
无法在包含投影中排除现场日期
这是一个很容易修复的错误,我将向您展示如何修复。您需要了解投影的工作原理。 但首先,让我们看看 find() 方法是如何工作的。 find()方法可以带两个参数,分别是1.filter和2.projection。投影有两种类型:1.包含投影和2.排除投影。
您可以执行此操作以对帖子集合上的标题字段执行包含投影:
db.posts.find({}, {"title": 1})
或
db.posts.find({}, {"title": 1, "_id": 0})
结果将是:
[
{
title: 'Post 1'
},
{
title: 'Post 2'
}
]
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})