Mongoose返回数组中的对象

时间:2015-09-29 14:18:48

标签: angularjs node.js mongodb express mongoose

无法解决问题。

我的API是在我的一个路由的数组下发送整个对象,尽管它在模式上与另一个返回对象的路径相同。

唯一的区别是一个使用FindById,但另一个使用额外的$ eq来搜索对象中的特定字段以匹配。

FindById返回我的对象​​正常但是那个使用$ eq的对象将它返回到数组中。他们的模式是相同的。这只是我必须处理的特质吗?

    apiRouter.get('/accts/:acct_id', function(req, res) {
    Acct.find( ({ acct_id: { $eq: req.params.acct_id } } ), function(err, acct) {
            if (err) res.send(err);

        res.json(acct);
    });
});


apiRouter.route('/users/:user_id')

    // get the user with that id
    .get(function(req, res) {
        User.findById(req.params.user_id, function(err, user) {
            if (err) res.send(err);

            // return that user
            res.json(user);
        });
    })

控制器绑定数据。

.controller('acctView', function($routeParams, Acct) {

    var vm = this;

    // set a processing variable to show loading things
    vm.processing = true;

    Acct.get($routeParams.accts_id)
        .success(function(data) {

            vm.processing = false;

            vm.accts = data;

        });

});

我最终不得不使用acct.accts[0].acct_id以角度访问我的对象,而我的所有其他页面都不会将对象作为额外数组接收。

如果需要,

架构:

var mongoose     = require('mongoose');
var Schema       = mongoose.Schema;

    // acct schema 
    var AcctSchema   = new Schema({
        acct_id: String,
        acct_name: String,
        acct_address_1: String,
        acct_address_2: String,
        acct_address_city: String,
        acct_address_state: String,
        acct_address_zip: Number,
        acct_address_country:  String,
        recipients: [],
        notes: {
            dist: String,
            misc: String
        }   
    });

module.exports = mongoose.model('Acct', AcctSchema);

1 个答案:

答案 0 :(得分:3)

findById()只返回一个文档。而find()返回数组中的多个文档。您可以使用findOne()代替find(),它只返回一个文档。