Агрегированный фасет Mongodb не будет работать с использованием _id

#node.js #mongodb #aggregate #facet #objectid

#node.js #mongodb #совокупный #фасет #objectid

Вопрос:

У меня есть следующее изображение ниже

введите описание изображения здесь

введите описание изображения здесь

Я использую _id, но не будет работать, но, когда я использую поле, подобное field_name, работает.

Я уже использую ObjectId («5f311 …») по-прежнему безуспешно

Но когда я использую запрос в клиенте robomongo, но с использованием ObjectId («5f311 …»), это работает.

Я высоко ценю вашу помощь, ребята. Я потратил на это часы.

Благодарим вас и сохраняем в безопасности.

Комментарии:

1. вы должны преобразовать свой идентификатор объекта string в идентификатор объекта при запросе или попытке { _id: { $toObjectId: "your string id" } }

Ответ №1:

используйте ObjectId из mongo следующим образом:

{ $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);
  });
  

Комментарии:

1. используйте $ toObjectId, например: { $toObjectId: «$ _id»}! может ли это вам помочь