Node.js 如何编写使用文档中两个字段的查询
标题可能还不够。让我解释一下 假设我的数据库结构为Node.js 如何编写使用文档中两个字段的查询,node.js,mongodb,Node.js,Mongodb,标题可能还不够。让我解释一下 假设我的数据库结构为 { name: "alex", age: "21", location: "university-alex" } 我知道这个数据库结构不合理,但我只想用最短的方式来说明我的问题 我想获取位置包含名称字段值的文档。这里的university alex包括,alex,因此它应该作为查询结果返回 到目前为止我做了什么? 我编写了此查询,但无法得到结果 db.collection.find({location: {$regex
{
name: "alex",
age: "21",
location: "university-alex"
}
我知道这个数据库结构不合理,但我只想用最短的方式来说明我的问题
我想获取位置
包含名称
字段值的文档。这里的university alex
包括,alex
,因此它应该作为查询结果返回
到目前为止我做了什么?
我编写了此查询,但无法得到结果
db.collection.find({location: {$regex: "$name"}})
如何编辑它?我认为您试图实现的目标可以通过
$where
操作符完成。
据
或者,您可以将JS表达式传递给find方法:
db.collection.find(function() {
return (this.location.includes(this.name));
});
希望有帮助,向@boehm_的答案致以最诚挚的问候。这是@boehm_答案中可行且非常清晰的一部分,您还可以创建一个多字段索引,用于查找所需内容。如果要执行组合查询方法,例如,如果传递的参数与其内容匹配或包含在其中,则查找多个
字符串
字段,则此类索引非常有用。你可以看一下这个文档页面。我不知道你是否在使用猫鼬,但可能有用
请注意,我的这种方法将返回所有包含一个或两个字段的文档,即您要查找的“单词”
在字段上创建索引之后
db.collection.createIndex(
{
name: "text",
location: "text"
}
)
假设您已将此索引命名为txtIndex
,则可以执行以下操作
用于节点方式的Mongo驱动程序
. . .
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);
});
});
}
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);
});
}
猫鼬路
. . .
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);
});
});
}
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);
});
}
可能受骗