我有一個文檔這樣的貓鼬:選擇方法不返回包括現場
var ConfigSchema = new Schema({
basicConfig: {
levelId: {
type: Number,
required: true
},
hostId: {
type: Number,
required: true
},
Name: {
type: String,
trim: true
},
Settings: {
Type1: {
// some types here...
}
Type2: {
// some types here...
}
}
},
enrolls: {
name: {type: String},
list: [String]
},
awards: {
enable: {type: Boolean},
Primary: {
amount: {type: Number},
type: {type: String}
}
}
現在我想找到configs
與hostId
比賽60
,並選擇basicConfig
領域。
Config.findOne({ 'basicConfig.hostId': 60 })
.select('basicConfig').exec(function(err, configs) {
if (err) {
console.error(err);
return ;
}
console.log(configs);
});
但是,該文件的所有字段將被退回。看起來select
不起作用?爲什麼?
輸出:
{ _id: 555c4144c0bff1541d0e4059,
enrolls: {},
awards: { primary: { PrimarySettings: {}, primaryAck: {} } },
basicConfig:
{ levelId: 24,
hostId: 60,
poolName: 'LC' } }
而且,那些以下代碼已經測試,這是行不通的。
BonusConfig.findOne({ 'basicConfig.hostId': 60 }, 'basicConfig', function(err, configs) {
if (err) {
console.error(err);
return ;
}
console.log(configs);
});
但是,沒有與select
用以下代碼的basicConfig
領域,它工作得很好。
BonusConfig.findOne({ 'basicConfig.hostId': 60 })
.select('-basicConfig').exec(function(err, configs) {
if (err) {
console.error(err);
return ;
}
console.log(configs);
});
我的代碼有什麼問題?
貓鼬版:24年3月8日
MongoDB的版本:2.6.7
編輯1
下面是查詢日誌中貓鼬調試模式。
Mongoose: configs.findOne({ 'basicConfig.hostId': 60 }) { fields: { basicConfig: 1 } }
編輯2
經過進一步調查。
的Config.findOne({ 'basicConfig.hostId': 60 }).select('basicConfig')
輸出結果:
{ _id: 555c4144c0bff1541d0e4059,
enrolls: {},
awards: { primary: { PrimarySettings: {}, primaryAck: {} } },
basicConfig:
{ levelId: 24,
hostId: 60,
poolName: 'LC' } }
其它字段是除basicConfig
空值。然而,我想要的結果是
{ _id: 555c4144c0bff1541d0e4059,
basicConfig:
{ levelId: 24,
hostId: 60,
poolName: 'LC' } }
你可以通過mongo客戶端運行相同的查詢嗎?你能否包含你想要匹配的實際文檔,只是爲了確保它不是數據問題? –
使用此命令'db.bonusconfigs.find({'basicConfig。hostId':60},{'basicConfig':1})'在mongo客戶端中,它可以正確獲取數據 – zangw