无法通过 Mongo(mongoose)中的点符号搜索子文档 [重复]
Posted
技术标签:
【中文标题】无法通过 Mongo(mongoose)中的点符号搜索子文档 [重复]【英文标题】:Unable to search on sub document via dot notation in Mongo (mongoose) [duplicate] 【发布时间】:2016-08-06 06:39:26 【问题描述】:Mongo 快把我逼疯了。我有这些架构:
var userSchema = new Schema(
username:
type: String,
require: true,
unique: true
,
password:
type: String,
require: true,
);
var User = mongoose.model('user', userSchema);
var deviceSchema = new Schema(
name:
type: String,
require: true,
unique: true
,
type: String,
lastvalue:
type: Schema.ObjectId,
ref: 'event'
,
owner:
type: Schema.ObjectId,
ref: 'user',
require: true
,
apiKey:
type: String,
unique: true,
default: function()
return crypto.randomBytes(64).toString('hex');
);
var Device = mongoose.model('device', deviceSchema);
我想检索用户的所有设备。所以:
Device.find('owner.username': req.params.username)
但它返回一个空数组!
我也试过:
Device.find('owner.username': req.params.username, 'owner':1)
Device.find('owner.username': req.params.username, 'owner.$':1)
没有任何运气...
我已经搜索了整个互联网,但找不到任何有用的东西!
【问题讨论】:
【参考方案1】:您需要先获取关联用户_id
,然后使用第一个用户查询中的_id
查询owner
字段上的Device
模型。下面展示了这种方法:
User.findOne( "username" : req.params.username ),
.exec(function(err, user)
if (err) throw err;
Device
.find("owner": user._id)
.populate('owner', 'username') // only return the username
.exec(function(err, devices)
if (err) throw err;
console.log(JSON.stringify(devices, undefined, 4));
);
);
【讨论】:
我可以在一个查询中完成吗?以上是关于无法通过 Mongo(mongoose)中的点符号搜索子文档 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
我无法使用 mongo / mongoose / NO METEOR 设置 react apollo mongodb app => 解析器
节点,js - Mongoose - 无法保存地理多边形 - CastError: Cast to number failed