Javascript Mongoose find()检查是否有任何值匹配
我正在从req.body获得姓名和地址Javascript Mongoose find()检查是否有任何值匹配,javascript,node.js,mongoose,Javascript,Node.js,Mongoose,我正在从req.body获得姓名和地址 const {name, address} = req.body; 我正在使用Mongoose.find检查我的数据库中是否已经存在该名称和地址 如果名称匹配,请检查地址。如果地址也匹配,则不执行任何操作 如果名称匹配,请检查地址。如果地址不匹配,请使用新地址更新地址 如果名称不匹配,请在数据库中创建一个新条目 我用下面的方法处理这个问题 Token.find({$or: [{name, address}]}, (err, existingName)
const {name, address} = req.body;
我正在使用Mongoose.find检查我的数据库中是否已经存在该名称和地址
- 如果名称匹配,请检查地址。如果地址也匹配,则不执行任何操作
- 如果名称匹配,请检查地址。如果地址不匹配,请使用新地址更新地址
- 如果名称不匹配,请在数据库中创建一个新条目
Token.find({$or: [{name, address}]}, (err, existingName) => {
if ( *name matches*) {
if ( *address matches* ) {
// Do nothing.
}
// If address does not match.
// Update address
}
// If name does not match
// Create a new entry
}
问题
- 如果名称匹配而地址不匹配,则它正在创建一个新条目。它没有更新
我的方法是错误的还是有更好的方法?谢谢您的帮助。首先,您需要了解这行代码的作用
Token.find({$or: [{name, address}]}, (err, existingName) => { }
这一行相当于:
SELECT * FROM * WHERE NAME=NAME OR ADDRESS=ADDRESS
let findName = () => {
return new Promise(function(resolve, reject) {
Token.findOne({name})
.exec(function(err, data) {
// Handle error.
// Resolve or Reject
})
})
}
let findAddress = () => {
return new Promise(function(resolve, reject) {
Token.findOne({address})
.exec(function(err, data) {
// Handle error.
// Resolve or Reject
})
})
}
现在,这不是你想要达到的。您要检查该名称是否存在,然后检查该名称的地址是否存在。因此,您的方法将失败
新方法:使用承诺或异步/等待
在您的情况下,您将查询名称(暂停一段时间),并查询地址。所以,做一些类似的事情:
SELECT * FROM * WHERE NAME=NAME OR ADDRESS=ADDRESS
let findName = () => {
return new Promise(function(resolve, reject) {
Token.findOne({name})
.exec(function(err, data) {
// Handle error.
// Resolve or Reject
})
})
}
let findAddress = () => {
return new Promise(function(resolve, reject) {
Token.findOne({address})
.exec(function(err, data) {
// Handle error.
// Resolve or Reject
})
})
}
现在兑现承诺
findName().then(findAddress).then(() => {
if(//name exists) {
if(//address exists) {
// Do nothing
}
// Update address
}
else {
// Create new entry
}
})