猫鼬在引用的属性(子文档)中搜索对象的值
Mongoose search for an object's value in referenced property (subdocument)
我有两个模式:
var ShelfSchema = new Schema({
...
tags: [{
type: Schema.Types.ObjectId,
ref: 'Tag'
}]
});
var TagSchema = new Schema({
name: {
type: String,
unique: true,
required: true
}
});
我想搜索 tags
数组具有特定值标签的所有货架。
我试过使用:
modelShelf.find({tags 'tags.name': 'mytag'})...
但它不起作用。它总是 returns 一个空数组。
任何的想法?
查看 db,每个 Shelf 实例仅链接标签的 objectID
。
我使用了引用,因为我还需要使用标签实体。
在 mongoDB 中,您基本上不能直接执行此操作,因为查询一次针对单个 collection。最近添加了 new features,它允许在使用聚合框架时进行某种连接,但根据您的需要,这不是必需的。
从您的架构中,我看到标签的名称是唯一的,因此您可以先使用
之类的内容获取所需的标签
modelTag.find({name: 'mytag'})
为了获取标签的 ID,然后查询您的货架 collection 以获得此标签 ID
modelShelf.find({tags: tagId})
我有两个模式:
var ShelfSchema = new Schema({
...
tags: [{
type: Schema.Types.ObjectId,
ref: 'Tag'
}]
});
var TagSchema = new Schema({
name: {
type: String,
unique: true,
required: true
}
});
我想搜索 tags
数组具有特定值标签的所有货架。
我试过使用:
modelShelf.find({tags 'tags.name': 'mytag'})...
但它不起作用。它总是 returns 一个空数组。
任何的想法?
查看 db,每个 Shelf 实例仅链接标签的 objectID
。
我使用了引用,因为我还需要使用标签实体。
在 mongoDB 中,您基本上不能直接执行此操作,因为查询一次针对单个 collection。最近添加了 new features,它允许在使用聚合框架时进行某种连接,但根据您的需要,这不是必需的。
从您的架构中,我看到标签的名称是唯一的,因此您可以先使用
modelTag.find({name: 'mytag'})
为了获取标签的 ID,然后查询您的货架 collection 以获得此标签 ID
modelShelf.find({tags: tagId})