【问题标题】:MongoDB / C#: checking if documents from an array exist without returning themMongoDB / C#:检查数组中的文档是否存在而不返回它们
【发布时间】:2017-03-04 15:08:13
【问题描述】:

我正在尝试寻找最快的方法来了解 MongoDB 中是否存在多个文档。我不需要这些文件本身,只需要确认它们的存在即可。

假设我有这个列表:

var L = new List<string> {"1", "3", "A"};

我想知道这些文件是否存在。

一种方法是这样(语法可能有点不对,因为我是从记忆中尝试的,但想法就在那里):

find(Query.In(_ => _._id, L));

它可以工作,但它也会返回所有文档,这是浪费时间

所以,我只能通过投影获得 ID:

find(Query.In(_ => _._id, L)).Project(Projection.Expression(_ => _._id));

这很好用,并返回给我一个现有 id 的列表。

问题是:查找/项目是否有效?还是有更快的方法来达到同样的效果?

(额外问题:如何使用流利的语法进行 query.in 操作?:))

【问题讨论】:

  • 不确定您使用的是哪个版本的 MongoDb 驱动程序,但 v2.4 有一个采用 FilterDefinition 的 Count() 方法。这应该可以让您获得所需的计数。
  • 我有 3.4 ; count 将无法告诉我存在哪些文件,只知道有多少。

标签: c# .net mongodb mongodb-.net-driver


【解决方案1】:

根据我的意见,你这样做的方式是好的。我也会这样做。 Project 步骤正在服务器上执行,因此您不会获得完整的文档,只有 ID,这正是您想要的。

您可以使用流利的语法进行相同的查询,只是(我假设您的集合在 collection 变量中):

collection.Find(_=>L.Contains(_._id)).Project(_=>_.Id).ToList();

【讨论】:

    猜你喜欢
    • 2023-03-31
    • 2014-03-30
    • 1970-01-01
    • 2012-07-02
    • 2021-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多