У меня есть две базы данных, которые называются пользователи и поиск. У них обоих есть таблица, такая же как и у db name. Содержимое базы данных следующее.
База данных — пользователи — таблица пользователей
База данных — поиск — поиск таблицы
Я использую mongoose, чтобы перечислить все содержимое таблицы пользователей следующим образом
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/users');
mongoose.model('users', {name: String});
mongoose.model('users').find({}, function(err, doc){
if (err) throw err;
console.log(doc);
});
и это работает хорошо и возвращает всех пользователей, которые находятся в базе данных, но когда я использую следующий код, чтобы перечислить все записи в таблице поиска
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/search');
mongoose.model('search', {title: String});
mongoose.model('search').find({}, function(err, doc){
if (err) throw err;
console.log(doc);
});
Возвращает NULL. в чем может быть причина.
На самом деле не уверен, почему вы используете разные базы данных здесь, возможно, вы путаете концепцию с «коллекциями», из которых вы можете иметь «много» коллекций в одном пространстве имен базы данных. Обычно это лучший шаблон для вашего приложения, где, по крайней мере, «большинство» элементов являются коллекциями в одной базе данных, если не всеми.
Но если у вас действительно есть разные базы данных, и у вас действительно есть коллекция «search» в базе данных «search», то вы, похоже, упускаете что-то в моделях мангустов.
Общая концепция состоит в том, чтобы рассматривать «модель» как «единичное» представление объекта. При связывании с «коллекцией» подразумеваемое отношение к единственному является «множественным». Таким образом, в действительности это наименование относится к коллекции с именем «users»:
var User = mongoose.model("User", { "title": String });
Таким образом, привязывая к «коллекции», mongoose «приумножает» имя модели как фактическое имя коллекции. Практика здесь состоит в том, что «пользователи» содержат много объектов «пользователя», что является естественной ассоциацией.
Просто так вы на самом деле назвали свою модель «пользователи», так что на самом деле это не приводит к плюрализации по умолчанию, а просто использует форму уже во множественном числе. Но это не относится к «поиску», где на самом деле mongoose считает по умолчанию, что вы на самом деле имеете в виду имя коллекции, которое является «множественным» для многих «поисковых» объектов, и естественным основанием этого является «поиски».
Так что, если вы уже создали коллекцию с именем «search» и в ней есть данные, вам нужно указать mongoose именно имя коллекции, а не предположение по умолчанию о том, что вы хотите использовать «search». Для этого «модель» принимает третий аргумент:
mongoose.model("search", { "title": String }, "search")
Это говорит о том, что на самом деле следует использовать существующую коллекцию «поиск», а не «поиск».
Таким образом, вы либо делаете это, либо переименовываете свои коллекции в соответствии с ожидаемой формой наилучшей практики. И не забудьте оставить их в единственной базе данных, если у вас нет веских причин поступить иначе.
Других решений пока нет …