2015-11-03 18 views
2

好的,所以在这个原始的question我试图只通过键名搜索,只输出该名称的值我能通过使用.toArray()来做到这一点,如果我没有那么我会得到这个巨大的输出不相关的数据。但是,在使用数据的回调方面很乏味,因为它在数组中不应该是数组。需要做.toArray()获取关于键名称的输出mongodb .find()不是值

一些例子。这两者有什么区别。前者给了我一个输出,不使用.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(); 
     }); 

而且为什么当是IE "credentials":1,"_id":0,"username":0包括在原来的问题更加然后一个参数的答案被用户阿洛克Deshwal你得到错误。

MongoError:Can not canonicalize query:BadValue Projection can not be mixed with Include and Exclusion。

所以我猜这个底线是我如何实现输出,停止使用.toArray()

输出我与.toArray获得()的。

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

我想要的输出。

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

回答

3

该错误意味着您不能混合包含和排除键(不考虑_id)。为了准确,你可以去与包含和排除的

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

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

混合不是allowed.You可以参考https://docs.mongodb.org/manual/tutorial/project-fields-from-query-results/了点。来为cursor.toArray()第二部分的替代品使用的下一个

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 
    } 
}) 
+0

真棒!在.next().each()或.toArray()之间有什么不同的性能比较快? – Darkrum

+2

你可以参考这个http://stackoverflow.com/questions/29675079/alternatives-to-mongodb-cursor-toarray-in-node-js。所有这三个都会将文档加载到客户端,所以应该没有太大的性能差异。 –

+0

谢谢!当我问我原来的问题时,你在哪里?哈哈! – Darkrum