如何取回“只”字_id";MongoDB find()中的字段

如何取回“只”字_id";MongoDB find()中的字段,mongodb,Mongodb,我只想返回mongo中与find()query匹配的文档id 我知道我可以在结果集中传递要排除或包含的对象,但是我找不到只返回\u id字段的方法 我的思维过程只是返回一点信息,这将更加有效(我的用例不需要其他文档数据,只需要ObjectId) 我希望能够使用的一个查询示例是: collection.find({}, { _id: 1 }).toArray(function(err, docs) { ... } 但是,这将返回整个文档,而不仅仅是\u id字段。您只需要使用投影来查找所

我只想返回mongo中与
find()
query匹配的文档id

我知道我可以在结果集中传递要排除或包含的对象,但是我找不到只返回
\u id
字段的方法

我的思维过程只是返回一点信息,这将更加有效(我的用例不需要其他文档数据,只需要
ObjectId

我希望能够使用的一个查询示例是:

collection.find({}, { _id: 1 }).toArray(function(err, docs) {
    ...
}

但是,这将返回整个文档,而不仅仅是
\u id
字段。

您只需要使用投影来查找所需内容

collection.find({filter criteria here}, {foo: 0, bar: 0, _id: 1});

因为我不知道你的文档集是什么样子,所以我只能为你做这些<例如,code>foo:0就是排除此属性。

我发现直接使用游标对象可以指定所需的投影。调用
toArray()
时,npm上的
mongodb
包将返回整个文档,而不管在初始
find()
中指定的投影如何。修复了下面的工作示例,该示例满足了我仅获取
\u id
字段的要求

示例文件:

{
  _id: new ObjectId(...),
  test1: "hello",
  test2: "world!"
}

工作投影

var cursor = collection.find({});
cursor.project({
    test1: 0,
    test2: 0
});

cursor.toArray(function(err, docs) {
    // Importantly the docs objects here only
    // have the field _id
});

因为
\u id
根据定义是唯一的,所以可以使用来获取所有文档的
\u id
值数组,如下所示:

collection.distinct('_id', function(err, ids) {
    ...
}
你可以这样做

collection.find({},'_id').toArray(function(err, docs) {
    ...
}

这就是我的想法,我需要事先知道所有文档属性。这很好,我只是觉得会有更好的方式来写。Thanks@fungus1487很高兴我能帮上忙,介意今天就到此为止吗?:)我会在一分钟后,当它让我很抱歉,这实际上没有工作。find上的
toArray()
生成一个光标,它返回的文档(无论投影如何)包括所有字段。我刚刚执行了这个:
collection.find({},{field1:0,field2:0}).toArray(函数(err,docs){console.dir(docs[0]);}
和字段1和2都被打印出来了。你能看一下并编辑你的问题吗?我达到了16mb的文档限制啊,是的,有限制。:)