即使它存在,我也无法从 mongodb 中检索值

Posted

技术标签:

【中文标题】即使它存在,我也无法从 mongodb 中检索值【英文标题】:I'm not able to retrieve value from mongodb even though it exists 【发布时间】:2017-01-03 06:48:09 【问题描述】:

我在本地运行 mongo。在这里,我将条目插入到我的数据库中并验证它是否存在

MongoDB shell version: 3.2.9
connecting to: test
> use testing
switched to db testing
> db.vetschool.insert(name: 'My First Cat')
WriteResult( "nInserted" : 1 )
> db.vetschool.findOne()
 "_id" : ObjectId("57c051cbd7bd69709fa7d98a"), "name" : "My First Cat" 

在这里我定义了我的模式并执行 findOne() 函数,它返回一个空值。虽然未显示,但我确实需要在文档顶部放置猫鼬。

mongoose.connect('mongodb://localhost/test');
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() 
  console.log('Successfully connected to MongoDB');
);
var kittySchema = mongoose.Schema(
    name: String
);

var Kitten = mongoose.model('Kitten', kittySchema);

Kitten.findOne().exec(function(err, success)
        console.log(success); //returns null
        console.log(err); //returns null
)

这可能是太多的附加信息,但这是我启动服务器时的输出和输出的空值

[nodemon] starting `node server.js`
Mongoose: mpromise (mongoose's default promise library) is deprecated, plug in your own promise library instead:   http://mongoosejs.com/docs/promises.html
Listening on port 3000...
Successfully connected to MongoDB
null
null

【问题讨论】:

【参考方案1】:

简短回答:您正在使用 mongo 手动将文档插入到 vetschool 集合中,然后要求 Mongoose 在 Kittens 集合中查找该文档。

长答案:Mongoose 会根据您传递的模式名称自动确定集合的名称。来自http://mongoosejs.com/docs/models.html:

The first argument is the singular name of the collection your model is for. Mongoose automatically looks for the plural version of your model name. Thus, for the example above, the model Tank is for the tanks collection in the database.

因此,如果您通过 Mongoose 执行某些操作,而某些操作手动执行,则由您来确保集合名称匹配。

【讨论】:

感谢您的回复!看起来我可能会错过其他东西。我创建了 Kittens 集合,添加了一个条目,重新启动了 mongo 和服务器,但仍然为空 哈好吧,我想通了,你的回答肯定有帮助。您提到了如何确定集合,然后我意识到我没有指定要查看哪个数据库,实际上是在创建集合之前创建另一个数据库。在默认数据库中创建一个名为 kittens 的集合是可行的。只是出于好奇,我将如何指定不同的数据库? 哦,是的,数据库名称也不同(testtesting)!根据mongoosejs.com/docs/connections.html#multiple_connections,您可以在连接字符串中指定数据库名称。所以不要使用mongodb://localhost/test,而是使用mongodb://localhost/foo 作为数据库foo

以上是关于即使它存在,我也无法从 mongodb 中检索值的主要内容,如果未能解决你的问题,请参考以下文章

即使拥有管理员权限,我也无法从 Facebook 页面获取事件 [重复]

无法从 glGetShaderInfoLog 检索错误消息

如果在函数内,则不会从mongodb检索API调用

无法从密钥环文件 secring.gpg 中检索密钥,因为它不存在

无法检索 Microsoft Access 自动编号值

从 SQL SELECT 语句中获取值,即使它在表中不存在