#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»}! может ли это вам помочь