无法通过 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)中的点符号搜索子文档 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

无法通过 mongoose 删除 mongo 数据库

我无法使用 mongo / mongoose / NO METEOR 设置 react apollo mongodb app => 解析器

节点,js - Mongoose - 无法保存地理多边形 - CastError: Cast to number failed

Mongo (+Mongoose) 错误:无法找到 $geoNear 查询的索引

无法使用mongoose连接到mongo docker镜像

通过 mongoose 将项目插入 mongo 数组