【发布时间】:2019-04-27 06:59:17
【问题描述】:
当我尝试使用 find() 函数时,Mongoose 返回一个空数组。有人可以帮我解决这个问题吗?
users.js
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
mongoose.Promise = global.Promise;
const userSchema = new Schema({
name: String
});
const user = mongoose.model('user', userSchema, 'users');
module.exports = user;
test_helper.js
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/user_test');
before((done)=>{
mongoose.connection.once('open',()=>{
console.log('Connected');
}).on('error', ()=>{
console.log('Error');
});
done();
});
beforeEach((done)=>{
mongoose.connection
.collections
.users
.drop(()=>{
done();
});
});
create_user.js
const assert = require('assert');
const User = require('../src/user');
describe('Create a user',()=>{
it('it should create a new user',(done)=>{
let joe = new User({
name : "Joe"
});
joe.save().then(()=>{
assert(!joe.isNew);
done();
});
});
})
reading-users.js
const assert = require('assert');
const User = require('../src/user');
describe('This will read all users', () => {
before((done) => {
joe = new User({name:'joe'});
joe.save().then(() => done());
});
it('It Should find all users named joe', (done) => {
User.findOne({name:"Joe"})
.then((foo)=>{
//assert(users[0]._id.toString()===joe._id.toString());
console.log(foo);
console.log(joe);
done();
});
});
});
==============================log================= ==========================
(node:3324) DeprecationWarning: 当前 URL 字符串解析器是 已弃用,并将在未来的版本中删除。要使用新 解析器,将选项 { useNewUrlParser: true } 传递给 MongoClient.connect。 创建用户已连接 √ 它应该创建一个新用户(274ms)
这将读取所有用户 [] {_id:5bfa98eb6bd05d0cfc5d639d,名称: '乔', __v: 0 } √ 它应该找到所有名为 joe 的用户
2 次通过 (1s)
【问题讨论】:
-
这里不应该返回一个“数组”。我想您可能已经多次将代码从
find()更改为findOne()?前者返回一个数组,而另一个则不返回。在测试的顶部添加mongoose.set('debug', true),以查看实际发送到 MongoDB 的输出。最重要的是“何时”! -
一个错字:'joe' 和 'Joe' 不同
-
@piisexactly3 “差异”在于测试的描述,而不是数据或查询。所以不是这样。
-
@Neil Lunn...我试过但结果为零
-
@piisexactly3 更正了它,但仍然一样......我已经在这工作了两天......有人可以帮我吗
标签: javascript node.js mongodb mongoose