在Mongo Compass上通过ObjectId进行搜索
在使用Mongo Compass进行搜索时,出现了无法使用ObjectId进行搜索的问题。这个问题的原因是Mongo Compass无法直接识别ObjectId作为查询条件。不过,我们可以通过一种解决方法来解决这个问题。
解决方法如下所示:
1. 首先,我们需要将ObjectId转换为字符串形式,以便能够在Mongo Compass中进行搜索。在上述示例中,ObjectId("5f8344e2a00ed7f6172a7184")可以转换为字符串"5f8344e2a00ed7f6172a7184"。
2. 在Mongo Compass的搜索框中,我们可以使用MongoDB的查询语法来进行搜索。对于ObjectId的搜索,我们可以使用{"_id": ObjectId("5f8344e2a00ed7f6172a7184")}的格式进行查询。
3. 将上述查询语法复制到Mongo Compass的搜索框中,并执行搜索操作。此时,Mongo Compass将能够正确识别ObjectId作为查询条件,并返回相关的结果。
总结起来,当在Mongo Compass中使用ObjectId进行搜索时,可能会遇到无法直接识别ObjectId的问题。为了解决这个问题,我们可以将ObjectId转换为字符串形式,并在查询语法中使用{"_id": ObjectId("5f8344e2a00ed7f6172a7184")}的格式进行搜索。这样,Mongo Compass就能够正确识别ObjectId并返回相关结果。
在Mongo Compass中,有一个问题是在搜索ObjectId时无法成功查询的。这个问题的出现是因为Mongo Compass的新版本支持通过类似于mongo shell的查询方式进行ObjectId的查询,而不再支持使用$oid
语法。如果使用的是旧版本的Mongo Compass(1.10.x之前的版本),则需要在查询框中输入以下内容:
{"_id":{"$oid":"58f8085dc1840e050034d98f"}}
。
另外值得注意的是,在UI界面中,可以点击一个_id,并自动将基于所点击内容的查询填充到查询框中。还可以使用Shift+点击多个字段来创建复合(与逻辑)查询条件,或者点击并拖动以选择一个范围。
在版本为1.8.x及以上的Mongo Compass中,对于浏览“Documents”选项卡下的数据,支持Skip和Limit功能。在查询栏右侧点击“Options”按钮可以进行相关设置。有关示例和详细信息,请参阅Query Bar文档。
“Schema”选项卡仅支持Limit功能,因为在该上下文中进行Skip操作没有意义。
要点击_id,需要在Schema选项卡上操作。如果_id的类型是ObjectId,则其分布的可视化将显示为一个日期范围,并且可以通过拖动来选择一个或多个行以填充基于_id的查询。如果_id是其他类型,则其中的一部分将单独显示,可以点击、拖动或Shift+点击。
在代码中使用$oid
语法已被弃用的原因是官方认为这是一个不必要的步骤,需要额外导入ObjectId类来构建id。
总结一下,要在Mongo Compass中成功搜索ObjectId,对于新版本的Compass,直接使用{_id: ObjectId('58f8085dc1840e050034d98f')}
的查询语法即可;对于旧版本的Compass,需要使用{"_id":{"$oid":"58f8085dc1840e050034d98f"}}
的查询语法。此外,还可以通过点击_id来快速填充查询框。