我有两个名为users和search的数据库。它们都有一个与db name相同的表。 dbs的内容如下。
数据库 - 用户 - 表用户
数据库 - 搜索 - 表格搜索
我使用mongoose列出users表的所有内容,如下所示
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 :(得分:0)
真的不确定为什么你在这里使用不同的数据库,也许你把这个概念与"集合"混淆了。你可以拥有多少"很多"集合到单个数据库名称空间。这通常是您的应用程序要遵循的最佳模式,其中至少"大多数"如果不是全部,则项目是同一数据库中的集合。
但是你确实拥有不同的数据库并且实际上有一个"搜索"收集在"搜索"数据库,然后你似乎错过了一些关于猫鼬模型的东西。
一般的概念是考虑一个"模型"成为一个单数的"对象的表示。当绑定到"集合"与单数的隐含关系是"复数"。所以这个命名确实是指一个名为" users":
的集合var User = mongoose.model("User", { "title": String });
因此,在收集"集合",mongoose"复数"模型名称作为实际集合名称。这里的做法是"用户"包含许多"用户"的对象这是一种自然的联想。
事实上,你已经调用了你的模型"用户",所以这实际上并没有按默认规则复数,只是使用已经复数的形式。但是"搜索"的情况并非如此,实际上mongoose默认认为你实际上是指"复数"对于许多人来说,搜索"对象,以及它的自然结果是"搜索"。
因此,如果您已经创建了一个名为&#34的集合,那么搜索"并且在其中有数据,你需要特别告诉mongoose要使用的集合的名称,而不是它默认假设您使用"搜索"。为此,"模型"采取第三个论点:
mongoose.model("search", { "title": String }, "search")
这告诉它实际使用你现有的集合"搜索"而不是"搜索"。
因此,您要么这样做,要么重新命名您的馆藏以符合预期的最佳实践形式。并且考虑将这些保存在单个数据库中,除非您有其他重要原因。