mongoose find возвращает ноль при использовании другой базы данных

У меня есть две базы данных, которые называются пользователи и поиск. У них обоих есть таблица, такая же как и у 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. в чем может быть причина.

0

Решение

На самом деле не уверен, почему вы используете разные базы данных здесь, возможно, вы путаете концепцию с «коллекциями», из которых вы можете иметь «много» коллекций в одном пространстве имен базы данных. Обычно это лучший шаблон для вашего приложения, где, по крайней мере, «большинство» элементов являются коллекциями в одной базе данных, если не всеми.

Но если у вас действительно есть разные базы данных, и у вас действительно есть коллекция «search» в базе данных «search», то вы, похоже, упускаете что-то в моделях мангустов.

Общая концепция состоит в том, чтобы рассматривать «модель» как «единичное» представление объекта. При связывании с «коллекцией» подразумеваемое отношение к единственному является «множественным». Таким образом, в действительности это наименование относится к коллекции с именем «users»:

var User = mongoose.model("User", { "title": String });

Таким образом, привязывая к «коллекции», mongoose «приумножает» имя модели как фактическое имя коллекции. Практика здесь состоит в том, что «пользователи» содержат много объектов «пользователя», что является естественной ассоциацией.

Просто так вы на самом деле назвали свою модель «пользователи», так что на самом деле это не приводит к плюрализации по умолчанию, а просто использует форму уже во множественном числе. Но это не относится к «поиску», где на самом деле mongoose считает по умолчанию, что вы на самом деле имеете в виду имя коллекции, которое является «множественным» для многих «поисковых» объектов, и естественным основанием этого является «поиски».

Так что, если вы уже создали коллекцию с именем «search» и в ней есть данные, вам нужно указать mongoose именно имя коллекции, а не предположение по умолчанию о том, что вы хотите использовать «search». Для этого «модель» принимает третий аргумент:

mongoose.model("search", { "title": String }, "search")

Это говорит о том, что на самом деле следует использовать существующую коллекцию «поиск», а не «поиск».

Таким образом, вы либо делаете это, либо переименовываете свои коллекции в соответствии с ожидаемой формой наилучшей практики. И не забудьте оставить их в единственной базе данных, если у вас нет веских причин поступить иначе.

0

Другие решения

Других решений пока нет …