[英]Mongoose, sub document is objects and not json
我正在使用貓鼬查詢mongodb,但我不明白為什么返回的子文檔只是Object類型,而不是JSON類型。
使用
hero.find({} ,{'deck' : {$elemMatch:{name:'Guard Tower'}}}, function(err, tower) {
console.log(tower);
}
退貨
[ { _id: 507ac406ba6ecb1316000001,
deck:
[ { name: 'Guard Tower',
description: 'This tower shoots stuff.',
cost: 13,
sellValue: 7,
radius: 180,
speed: 40,
dmg_min: 0,
dmg_max: 0,
actual_height: 40,
sprite: 'guardtower_red.png',
anim: [Object],
size: [Object],
projectile: [Object],
upgrade: [Object] } ] } ]
子文檔(例如動畫,大小,彈丸,升級)是對象,我需要嵌套信息,如何獲取信息? 無需再次查詢?
所有文檔和子文檔都是JavaScript中的對象。 只是在調用util.inspect
格式化文檔以進行輸出時, console.log
使用默認深度2。 您可以自己調用util.inspect
來輸出文檔的所有級別:
var util = require('util');
hero.find({} ,{'deck' : {$elemMatch:{name:'Guard Tower'}}}, function(err, tower) {
console.log(util.inspect(tower, false, null));
});
使用find()在Mongoose上進行查詢,將返回Mongoose文檔(不是JSON)。 您可以使用lean()方法返回POJO:
hero
.find({} ,{'deck' : {$elemMatch:{name:'Guard Tower'}}})
.lean()
.exec(function(err, tower) {
//tower is a JSON here
console.log(tower);
});
但是,JohnnyHK所說的關於控制台日志的說法是正確的,它只會將嵌套的文檔顯示為[Object]。
更新:請注意,使用.lean()將返回對象,並且您可能擁有的任何虛擬字段或特殊吸氣劑將被忽略。
JohnnyHK是正確的,但是如果您只想注銷JSON,則更簡單的方法是
console.log(tower.toJSON());
您可以查看我對Rodrigo的評論,以了解其工作原理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.