@boehm_sの一部は、それはの答え実行可能で非常に明確で、必要なものを見つけるために使用できる複数のフィールドインデックスを作成することもできます。この種の索引は、問合せの統合アプローチを実行する場合に非常に便利です。渡されたパラメータがその内容と一致するか、それらに含まれている場合は、複数のフィールドを参照してください。string
Text Indexesに関するこのドキュメントページをご覧ください。 Mongoose
を使用しているかどうかわかりませんが、this answerが役に立つかもしれません。
私のこのアプローチは、あなたが探している "単語"の一方または両方のフィールドにすべてのドキュメントを返すという事実に注意してください。あなたのフィールドにインデックスを作成
db.collection.createIndex(
{
name: "text",
location: "text"
}
)
後
そして、あなたはノードウェイ
. . .
let userProjection = {
"name": 1,
"age": 1,
"location": 1
};
/**
* @param req Contains information to find a user
* @param req.findMe Contains name concatenated to location
*/
let findUsers = (req) => {
letUsers = db.collection('users');
return new Promise((resolve, reject) => {
User.findOne({'txtIndex': params.body.findMe}, {fields: userProjection},(err, user) => {
if (err) {
return reject({message: 'MongoDB Error', err: err});
}
if (!user) {
return reject({message: 'User not found!'});
}
return resolve(user);
});
});
}
ため
Mongoのドライバを行うことができます、あなたがこのインデックスtxtIndex
を命名しましたとしましょう
マングースウェイ
let Users = require('./users-model.js);
/**
* @param req Contains information to find a user
* @param req.findMe Contains name concatenated to location
*/
let findUsers = (req) => {
Users.findOne({txtIndex: req.body.FindMe}).then(function (err, user) {
if (err) {
return reject({message: 'MongoDB Error', err: err});
}
if (!user) {
return reject({message: 'User not found!'});
}
return resolve(user);
});
}
https://stackoverflow.com/questions/40984829/in-mongodb-how-to-perform-query-based-on-if-one-string-field-contains-anotherの可能な部分 – JohnnyHK