我正在建立一个新服务器,使用mongoDB作为数据库,并使用mongoose与之交互。我将带有标签的图像链接保存在数据库中,所有图像都具有通用标签:*
(在保存新图像时会进行检索和保存)
我想检索具有所有给定标签的图像。
这是图像的架构
const mongoose = require('mongoose');
const imageSchema = mongoose.Schema({
link: {
type: String,
required: true
},
tags: {
type: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'Tag'
]},
default: []
}
});
consy Image = mongoose.model('Image', imageSchema);
这是标签的架构
const mongoose = require('mongoose');
const tagSchema = mongoose.Schema({
name: {
type: String,
required: true,
unique: true,
trim: true,
maxlength: 20,
lowercase: true
}
});
const Tag = mongoose.model('Tag', tagSchema);
这是我尝试过的
Image.find({
tags: {
$elemMatch: {
name: { $in: ['*'] }
}
}
}).populate('tags');
还有
Image.find({
'tags.name': { $in: ['*'] }
}).populate('tags');
但是我没有图像。
但是当我做一个简单的Image.find().populate('tags');
时,我的确得到了所有带有属性标签的图像,这些属性标签是一组对象,只有一个对象的标签名称为*
。
我做错了什么?
答案 0 :(得分:0)
要查找通用标签,我们可以使用$regex。请找到以下查询以检索所有带有Image.find({
'tags.name': { $regex: /\*/, $options: 'i' }
})
needs_reload
答案 1 :(得分:0)
如果您要查找带有'*'
标签的所有图像,也许可以尝试-
find().
populate({
path: 'tags',
match: { name: '*' }
}).
exec();
我认为此链接对您有用-https://mongoosejs.com/docs/populate.html#query-conditions