Невозможно применить метод find () с собственным MongoDB из-за типа идентификатора

#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», который вернул результат моего первого запроса. На самом деле это вложенный запрос. Я редактирую свой вопрос. Еще раз спасибо.