MongoServerError:无法在包含投影中排除字段日期

问题描述 投票:0回答:4

我正在使用 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

我试图获取所有文档对象(不包括日期参数并包括标题参数),但出现错误...

database mongodb mongodb-query
4个回答
6
投票

根据文档,

find
中的第一个参数是过滤器,第二个是
projection
projection
允许您指定要返回的字段。
_id
是您需要在投影中显式排除的唯一字段。对于所有其他字段,您只需说明包含内容。您必须遵循以下格式。

db.posts.find({}, {title: 1, body:1, category:1, likes:1, tags:1})

1
投票

还有一种可能是

在“帖子”猫鼬模式中, 如果我们像这样设置日期键

date: {
  type: string,
  select: true
}

select:true
在所有查找查询中始终返回日期键

并在投影或

{date:0}
对象中传递
dot_select(.select)
将返回此错误:

无法在包含投影中排除现场日期


0
投票

这是一个很容易修复的错误,我将向您展示如何修复。您需要了解投影的工作原理。 但首先,让我们看看 find() 方法是如何工作的。 find()方法可以带两个参数,分别是1.filter和2.projection。投影有两种类型:1.包含投影和2.排除投影。

  1. 包含投影是指指定查询文档的结果中包含的所有字段。这是通过将 1 分配给需要包含在作为 find 方法的第二个参数传递的对象中的所有键值来完成的。请注意,执行包含投影时只能添加“_id”键进行排除。

您可以执行此操作以对帖子集合上的标题字段执行包含投影:

db.posts.find({}, {"title": 1})

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

结果将是:

[
  {
    title: 'Post 1'
  },
  {
    title: 'Post 2'
  }
]
  1. 排除投影是指在查询文档的结果中指定要排除的所有字段。这是通过将 0 分配给作为 find 方法的第二个参数传递的对象中所需排除的所有键值来完成的。 要使用排除投影获得与上面包含投影相同的结果,您可以这样做:
db.posts.find({}, {"_id": 0, "body":0, "category":0, "likes":0, "tags":0, "date":0})

结果将是:

[
  {
    title: 'Post 1'
  },
  {
    title: 'Post 2'
  }
]

感谢您的阅读。我希望这能让您对投影有更深入的了解。


0
投票

这已经晚了很多,但这里有一些东西可能会帮助您获得除日期之外的所有内容:

db.posts.find({}, {date: 0})
© www.soinside.com 2019 - 2024. All rights reserved.