#node.js #mongodb #sails.js #mongodb-query #node-mongodb-native
#node.js #mongodb #sails.js #mongodb-запрос #узел-mongodb-родной
Вопрос:
У меня есть функция, которая необходима для получения результатов.
Когда я даю 1 в качестве фильтра _id, все в порядке.
collectionPersonnel
.find({ '_id' : 1 })
.toArray(function (err, personnel) {
console.log(personnel);
});
Если я укажу фильтр другим способом, например user [0][‘personnel_id’] — то есть хранилище 1 — тогда я получу только результат [];
collectionPersonnel
.find({ '_id' : user[0]['personnel_id'] })
.toArray(function (err, personnel) {
console.log(personnel);
});
А затем я попробовал другой способ. Но это не работает, потому что я использовал строку (user[0][‘personnel_id’]) вместо идентификатора объекта.
var ObjectID = require('mongodb').ObjectID;
var personnelPK_Hex = (user[0]['personnel_id']).toHexString();
var personnelPK = ObjectID.createFromHexString(personnelPK_Hex);
Что мне делать?
Редактировать
Все мои коды приведены ниже;
module.exports = {
show: function(req, res) {
User.native(function(err, collectionUser) {
if(err) {
console.log("There is no exist a User by current_id");
};
collectionUser
.find({'_id' : req.param('id')})
.toArray(function (err, user) {
Personnel.native(function(err, collectionPersonnel) {
if(err) {
// handle error getting mongo collection
console.log("There is no exist a Personel by current _id");
};
if(!collectionPersonnel) {
console.log("There is no exist a Personel by current _id");
};
// var ObjectID = require('mongodb').ObjectID;
// var personnelPK_Hex = (user[0]['personnel_id']).toHexString();
// var personnelPK = ObjectID.createFromHexString(personnelPK_Hex);
collectionPersonnel
.find({ '_id' : user[0].personnel_id })
.toArray(function (err, personnel) {
console.log(personnel);
});
});
});
});
}
};
И вывод консоли:
[]
Решаемая
Точно так же, как сказал apsillers. Я неправильно присвоил числовой _id коллекции. Я исправил значение _id, и все в порядке.
Спасибо вам всем…
Комментарии:
1. Точно! Вы правы! Я решил проблему некоторое время назад. В любом случае спасибо…
2. @apsillers — продолжайте и опубликуйте свое решение в качестве ответа, чтобы OP мог дать вам очки
Ответ №1:
user[0]['personnel_id']
может быть строка. Для Mongo "1"
отличается от 1
, поэтому ваш буквальный номер 1
сработал, а ваша переменная (которая содержит строку) — нет.
Вместо этого попробуйте использовать унарный плюс для преобразования строки в число : user[0]['personnel_id']
.
Ответ №2:
попробуйте использовать как user[0].personal_id вместо user [0][‘personnel_id’] пожалуйста, предоставьте свой дизайн схемы, который был бы лучше, чтобы выяснить, чего именно вам не хватает.
я пробовал так
collectionPersonnel
.find({ '_id' : user[0].personnel_id })
.toArray(function (err, personnel) {
console.log(personnel);
});
Комментарии:
1. Спасибо за ваш совет, Дэвид. Я пробовал ваш совет, но он не работает для меня. Между тем, когда я пишу user[0].personnel_id или user[0][‘personnel_id’] в console.log, консоль выводит 1 правильно. (Я не знаю, как обеспечить дизайн схемы) Я пробовал вложенные запросы. Во-первых, для запроса коллекции «User» и, во-вторых, для запроса коллекции персонала с помощью «User.personnel_id», который вернул результат моего первого запроса. На самом деле это вложенный запрос. Я редактирую свой вопрос. Еще раз спасибо.