【问题标题】:Mongoose return a empty arrayMongoose 返回一个空数组
【发布时间】: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


【解决方案1】:

此问题的根本原因是每次您开始测试时,创建的记录总是会在您的测试开始之前被删除。这发生在您的 test_helper.js 文件中的 beforeEach 块内。尝试将beforeEach 替换为afterEach

afterEach((done)=>{
    mongoose.connection.collections.users.drop(()=>{
        done();
    });
});

【讨论】:

    猜你喜欢
    • 2021-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-13
    • 2012-12-20
    相关资源
    最近更新 更多