使用节点

时间:2018-02-27 10:34:04

标签: node.js mongodb mongoose

我是节点和节目的初学者MongoDB的。我试图使用mongoose从查询返回的对象中记录一个值。如果我在循环中运行它,我可以得到值,但我试图在不使用循环的情况下获取值。

这是我的代码 -

That.find({$and: [{"userId" : {"$ne" : ""}},{"userId" : {"$exists" : true}}]}).sort({"_id" : -1}).limit(1).select("userId").exec(function(err, doc)
            {
                if(err)
                {
                    console.log('User ID ERROR-');
                    callback({error:err,message:"Error getting max user ID"});
                }else {
                    console.log('User ID-');
                    console.log(doc);
                    console.log(typeof(doc));
                    doc.forEach(function(eachdoc) {
                        console.log(eachdoc.userId);
                    });
                    process.exit();
                }
            });

而不是做

doc.forEach(function(eachdoc) {
    console.log(eachdoc.userId);
});

如果undefined

,为什么console.log(doc.userId);

还有什么方法可以从结果集中删除_id

非常感谢任何帮助。提前谢谢。

2 个答案:

答案 0 :(得分:2)

在查找函数中的查询对象之后添加 {_ id:0} ,以从结果中删除_id。 doc是一个你无法直接访问值的数组,你必须使用循环或doc [0] .userId。

That.find({
    $and: [{
        "userId": {
            "$ne": ""
        }
    }, {
        "userId": {
            "$exists": true
        }
    }]
}, {
    _id: 0
}).sort({
    "_id": -1
}).limit(1).select("userId")

答案 1 :(得分:1)

回答第一个问题,你可以使用

console.log(doc[0].userId); 

而不是

doc.forEach(function(eachdoc) {
    console.log(eachdoc.userId);
});

关于第二个问题,请参阅How to prevent MongoDB from returning the object ID when finding a document?