【发布时间】:2020-03-23 12:27:16
【问题描述】:
我不是试图创建一个唯一的数组元素,而是确保如果我有一个 pairs 数组(它们是对象),code 的值都不同。
这是我的架构定义:
const redirectSchema = new mongoose.Schema({
username: {
type: String,
required: true,
},
name: {
type: String,
required: true,
unique: true
},
default_link: {
type: String,
required: true,
},
pairs: [
{
code: { // I want this field specifically to be unique within the document only
type: String,
required: true
},
site: {
type: String,
required: true
}
}
],
date: {
type: Date,
required: true,
default: Date.now
}
})
例如,像这样插入pair 就可以了。
{
code: "US",
site: "google.com"
}
但是不管site如何,在此文档中插入另一个具有相同code的pair是不行的。
{
code: "US", // Should not work, since the code "US" already exists within the array of pairs
site: "amazon.com"
}
我正在尝试使用Redirect.findOne() 和Redirect.updateOne() 执行此操作,但是我遇到了编译器错误,或者只有在已经存在重复项后才会执行检查。
这是我目前的路线(允许重复 codes):
// Add pair to given redirect
router.post('/:name/insert_pair', verifyToken, async (request, response) => {
const token = request.header("auth-token")
const usernameFromToken = jwt.decode(token).username
const { code, site } = request.body
// Remember: you may edit only your own content
try {
const edited = await Redirect.findOneAndUpdate(
{
username: usernameFromToken,
name: request.params.name
},
{
$push: {
pairs: { code, site }
}
}
)
const specific = await Redirect.findOne(
{
username: usernameFromToken,
name: request.params.name
})
response.send(specific)
} catch (error) {
response.status(400).json(error)
}
【问题讨论】:
标签: mongodb express mongoose mongodb-query mongoose-schema