Mongodb 使用 _id 无法聚合 facet

Mongodb aggregate facet won't work using _id

我下面有如下图片

我使用 _id 但不起作用,但是当我使用像 这样的字段时field_name 正在工作。

我已经使用了 ObjectId("5f311...") 还是不行

但是当我在 robomongo 客户端中使用查询但使用 ObjectId("5f311...") 时它有效。

非常感谢你们的帮助。我为此花了几个小时。

谢谢你,注意安全。

像这样使用 mongo 的 ObjectId:

{ $match: { _id: mongo.ObjectId("5f43ebb18415f39cf1cd75d4") } }

完整示例:

let mongo = require("mongodb");

let dbname = "test";
let mongoServerUrl = "mongodb://127.0.0.1:27017/" + dbname;

const connect = function () {
  return new Promise((resolve, reject) => {
    mongo.connect(
      mongoServerUrl,
      {
        useNewUrlParser: true,
        useUnifiedTopology: true,
      },
      (err, client) => {
        if (err) {
          reject(err);
        } else {
          let database = client.db(dbname);
          resolve(database);
        }
      }
    );
  });
};

connect()
  .then((database) => {
    console.log("connect to database");

    database
      .collection("new")
      .aggregate([
        {
          $facet: {
            query1: [
              { $match: { _id: mongo.ObjectId("5f43ebb18415f39cf1cd75d4") } },
            ],
            query2: [
              { $match: { _id: mongo.ObjectId("5f43ebb78415f39cf1cd75d5") } },
            ],
          },
        },
      ])
      .toArray(function (err, res) {
        if (err) {
          console.log(err);
        }
        console.log("get new done");
        console.log(res);
        console.log(res[0].query1);
      });
  })
  .catch((error) => {
    console.log(error);
  });