【问题标题】:use mongoose model.find() to get all entries of only 1 field使用 mongoose model.find() 获取只有 1 个字段的所有条目
【发布时间】:2016-09-03 13:44:06
【问题描述】:

我尝试使用不同的 model.find() 变体,但没有一个能满足我的要求。

下面的代码是我正在使用的,但它显示了每个字段,我只想要“iframe”字段。

app.get('/api/videos', function (req, res) {
    Video.find({}, function (err, docs) {
       res.json(docs);
    });
});

下面的代码确实有效,我只得到了“iframe”字段,但它反转了 json 输出,我不希望这样。它也有唯一的值,尽管它并不重要,因为每个条目都是唯一的。

app.get('/api/videos', function (req, res) {
    Video.find().distinct('iframe', function (err, docs) {
        res.json(docs);
    });
});

W

【问题讨论】:

    标签: javascript node.js mongodb iframe mongoose


    【解决方案1】:

    你要找的是projection:

    Video.find({}, {iframe: 1}, function (err, docs) {
       res.json(docs);
    });
    

    find 函数的第二个参数告诉返回哪个字段。如果您也不想要_id,请使用:{_id:0, iframe:1}

    像这样:

    Video.find({}, {_id:0, iframe:1}, function (err, docs) {
       res.json(docs);
    });
    

    但是,投影不会为您提供 不同 值。它只返回您想要使用的字段(以及重复)。

    【讨论】:

    • 啊,这就是第二个参数的工作原理,之前我读到它时不明白。感谢您的解释!
    • 没有问题。更新了我的回答,说projection 没有给你不同的值,你知道的。
    【解决方案2】:

    您可以使用projection 参数指定您希望在结果中包含哪个字段。

    db.collection.find(查询,投影)

    如果 find() 包含投影参数,则匹配文档仅包含投影字段和 _id 字段。您可以选择排除 _id 字段。

    投影参数采用以下形式的文档:

    { field1: <boolean>, field2: <boolean> ... }
    

    &lt;boolean&gt; 值可以是以下任意值:

    1 或 true 以包含该字段。 find() 方法总是包含 _id 字段,即使该字段没有在投影参数中明确声明要返回。

    0 或 false 以排除该字段。

    当您包含一个字段时,您只能在 _id 字段的情况下明确排除字段。

    app.get('/api/videos', function (req, res) {
        Video.find({}, {_id:0, iframe:1 }, function (err, docs) {
           res.json(docs);
        });
    });
    

    【讨论】:

      猜你喜欢
      • 2021-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 2022-12-10
      • 1970-01-01
      相关资源
      最近更新 更多