美文网首页
Mongoose 遇到的问题总结(X.1)

Mongoose 遇到的问题总结(X.1)

作者: simuty | 来源:发表于2017-03-07 11:10 被阅读1240次

    Mongoose 遇到的问题总结

    1. mongoose findById返回为空

    代码如下: 
    Product.findById(productID, function(err, product){});
    null
    
    

    解决方法:

    1.开启debug模式,可以看到完整的执行过程
    
    var mongoose = require('mongoose').set('debug', true);
    
    
    2.执行的
    Mongoose: products.findOne({ _id: ObjectId("58afa81477f96288adbd6a95") }, { fields: undefined })
    
    

    2. mongoose 返回数据库集合方法

    mongoose.connection.db.listCollections().toArray(function(err, names) {
        if (err) {
            console.log(err);
        }
        else {
            names.forEach(function(e,i,a) {
                mongoose.connection.db.dropCollection(e.name);
                console.log("--->>", e.name);
            });
        }
    });
    
    

    3. mongoose 直接操作已经存在的集合(没有设置Scheme)

    function find (collec, query, callback) {
        mongoose.connection.db.collection(collec, function (err, collection) {
        collection.find(query).toArray(callback);
        });
    }
    
    
    simply do find(collection_name, query, callback); to be given the result.
    
    
    find('foo', {a : 1}, function (err, docs) {
                console.dir(docs);
            });
    //output: [ { _id: 4e22118fb83406f66a159da5, a: 1 } ]
    
    

    4. update 参数为空, 穿不进值

    router.get('/test', function(req, res, next){
    
    var conditions = {"Prodects.id": "2"},
              update =  {'$inc': {"Prodects.$.price": 1}},
              options =  {upsert:true};
              
          CartModel.update(conditions, update, options, function(err) {
          });
    });
    

    终端打印结果:

    { '$inc': { 'Prodects.$.price': 1 } }
    Mongoose: carts.update({ 'Prodects.id': '2' }, { '$inc': {}, '$setOnInsert': { __v: 0 } }, { upsert: true })
    

    但无法传入update 参数中, 结果为'$inc': {}

    解决:
    万般无奈,Google了, stackoverflow了, github issue提问了, 但是, 不知道咋整, 后来,当尝试过find, insert时出现问题,

    CartModel.inset({"key": "value"}, function(err) {
          });
    

    报错!!!!
    这个找到的答案是model.collection.insert();

    抱着死马当活马医的态度试了一下, 终端终于显示出想要的结果了,

    var Model = require('../models/model');
    
    router.get('/test', function(req, res, next){
       var conditions = {"Products.name": "mongodb"},
            update =  {'$inc': {"Products.$.price": 100}};
    
          Model.collection.update(conditions, update, function(err, result){
              res.send(result)
            });
    });
    
    

    终端

    carts.update({ 'Products.name': 'mongodb' }, { '$inc': { 'Products.$.price': 100 } })
    
    

    还问了问国外友人-_-Update can not set The second parameter #5067

    PERFECT

    参考:
    findbyid为null
    listCollections
    How to access a preexisting collection with Mongoose?

    更多精彩内容请关注“IT实战联盟”哦~~~


    IT实战联盟.jpg

    相关文章

      网友评论

          本文标题:Mongoose 遇到的问题总结(X.1)

          本文链接:https://www.haomeiwen.com/subject/mjyhgttx.html