MongoDB投影参数在findOne()中不起作用



我试图在findOne((上使用投影参数从文档中提取一个字段(stats(,但它似乎只是返回整个文档。我在Node.js 中使用版本"mongodb":"^3.4.1.">

这是文件结构

{ _id: 5e563015fa9a1a0134cac3cb,
  username: 'user1',
  password: '1234',
  email: 'user@email.com',
  stats: 
   { totalViewed: 122,
     totalUnique: 4,
     tknow: 80,
     tdknow: 42,
     setCnt: 78 },
  progress: 
   [ { cardId: 1001, knowCnt: 3, dknowCnt: 4 },
     { cardId: 1016, knowCnt: 0, dknowCnt: 0 } ] }

这是代码:

 var findOneDoc = function() {
        db.collection("testusers").findOne(
          { username: "user1" },
          { stats: 1 }, //field to return
          function(err, result) {
            if (err) {
              console.log("Error: ", err);
            }
            console.log("Success: ", result);
          }
        );
      };
     findOneDoc();

我也试过:{$project: {stats: 1}},但没有用

感谢

根据文档,.findOne()方法将选项作为第二个参数,建议使用projection定义字段:

db.collection("testusers").findOne(
    { username: "user1" },
    { projection: { stats: 1 } },
    function(err, result) { ... }
);

对于findOne操作,传递的第二个参数是options参数,因此您应该在options参数中传递项目,如下所示:

query = { username: "user1" };
options = { projection: { stats: 1 }};
db.collection("testusers").findOne(query, options)

你可以像米克说的那样,用findOne

await db.collection("testusers").findOne(
    { username: "user1" },
    { projection: { stats: 1 } },
    function(err, result) { ... }
);

或者你可以用find来做,比如

await db.collection("testusers")
.find({ username: "user1" })
.limit(1)
.project(["stats"])
.toArray()

您可以将字段添加到阵列项目中以获得更多字段

findOne返回一个文档。使用find((…。。

最新更新