【问题标题】:Needing to do .toArray() to get output of mongodb .find() on key name not value需要做 .toArray() 以获取 mongodb .find() 的输出键名而不是值
【发布时间】:2015-11-04 02:23:10
【问题描述】:

好吧,所以在这个原始的question 中,我试图仅按键名搜索,并且只输出该名称的值,如果我没有使用 .toArray() 就可以做到这一点,那么我会得到这么大输出无关数据。但是在回调中使用数据很乏味,因为它不应该在数组中。

一些例子。这两者有什么区别。前者在不使用 .toArray() 的情况下给我一个输出,而后者如果我删除 .toArray() 我得到不相关的数据作为输出。

以前的

collection.findOne({"username" : username}, function(err, result) {
            console.log(result);
            callback(err, result);
            db.close();
        });

后者

collection.find({},{"credentials":1}).toArray(function(err, result) {
            callback(err, result);
            db.close();
        });

还有为什么当包含多个参数时,即 "credentials":1,"_id":0,"username":0 就像在原始问题中一样,用户 Alok Deshwal 的回答你会得到错误。

MongoError:无法规范化查询:BadValue Projection 不能同时包含包含和排除。

所以我想底线是如何在不使用 .toArray()

的情况下实现输出

我通过 .toArray() 得到的输出。

[{
    _id: 5636e00c09431db4560ef063,
    credentials: {
        password: '120bfeae7386165304b1cce4755a5c509593cc9157f58bac9d6f03e2230421cf',
        randomSalt: '00dfb37635ba7e5a513f9fd6e8bdf746f85ec3571df8288e1fdb44f399e331f0'
    }
}]

我想要的输出。

{
    _id: 56378e258300a47301b151ed,
    credentials: {
        password: '05c9f953969c7478fab0c5495b50d356ae9205c62ff41bab4d7891b804c1f369',
        randomSalt: '09973bc8109a9f6255f63e96528f5cf8ef74248192c60121159781f5d1f5f264'
    }
}

【问题讨论】:

    标签: javascript node.js mongodb


    【解决方案1】:

    该错误意味着您不能混合包含和排除键(_id 不考虑)。准确地说,你可以继续

    "credentials":0,"_id":0,"username":0
    

    "credentials":1,"_id":0,"username":1
    

    不允许混合包含和排除。您可以参考https://docs.mongodb.org/manual/tutorial/project-fields-from-query-results/。来到 cursor.toArray() 的第二部分替代方案正在使用 next

    cursor.next(function(err,result){
       if (result)
          //Returns the next document in a cursor.
    })
    

    或者如下使用每种方法

    cursor.each(function(err,result){
        if(result){
           //each document in cursor
        }
    })
    

    【讨论】:

    • 太棒了! .next() .each() 或 .toArray() 之间有什么不同的性能方面更快吗?
    • 你可以参考这个stackoverflow.com/questions/29675079/…。这三个都将文档加载到客户端,因此性能差异应该不大。
    • 谢谢!当我问我最初的问题时,你在哪里!哈哈!
    • 别担心!乐于助人!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-18
    • 2015-12-16
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    • 2017-09-07
    • 2023-03-23
    相关资源
    最近更新 更多