javascript - 如何使用带有匹配值列表的 find() 返回多个文档
问题描述
我正在测试 find() 和 $in,其中我提供了一个包含匹配名称列表的数组作为查询输入以查找相应的 _id。但是,即使我在数组中有多个匹配的用户名,我也只能得到一个匹配的(第一个)。
如何使用用户名列表作为查询输入返回多个匹配项?“$in”是正确的方法吗?
ps:我对网络编程比较陌生;下面的 id 被屏蔽;
exports.getUserID = (req, res, next) => {
const namearray = req.body.name.split(',');
console.log('name array:', namearray);
const myCursor = User.find({ name: { $in: namearray } }).then(users => {
users.forEach(user => {
console.log('found user id:', user._id);
});
res.status(200).send(users);
});
};
即使 namearray 有 3 个匹配的名称,它也只返回一个文档,如下所示。
[
{
"works": [],
"_id": "6xxxxxxxxxxxxx",
"name": "user1",
"email": "user1@test.com",
"__v": 0
}
]
控制台输出:
name array: [ 'user1', ' user2', ' user3' ]
found user id: 6xxxxxxxxxxxxx
如果我使用数组(userName)对名称列表进行硬编码,如下所示,它可以正常工作。
exports.getUserID = (req, res, next) => {
const userNAME = ['user1', 'user2', 'user3'];
// const namearray = req.body.name.split(',');
const myCursor = User.find({ name: { $in: userNAME } }).then(users => {
users.forEach(user => {
console.log('found user id:', user._id);
});
res.status(200).send(users);
});
};
硬编码名称数组时返回 3 个匹配的文档。
[
{
"works": [],
"_id": "6xxxxxxxxxxxxx",
"name": "user1",
"email": "user1@test.com",
"__v": 0
},
{
"works": [],
"_id": "6xxxxxxxxxxxxx",
"name": "user2",
"email": "user2@test.com",
"__v": 0
},
{
"works": [],
"_id": "6xxxxxxxxxxxxx",
"name": "user3",
"email": "user3@test.com",
"passwordChangedAt": "2019-07-01T00:00:00.000Z",
"__v": 0
}
]
控制台输出:
found user id: 6xxxxxxxxxxxx1
found user id: 6xxxxxxxxxxxx2
found user id: 6xxxxxxxxxxxx3
这是我的html代码:
<!DOCTYPE html>
<html>
<form action="/users/getUserID" method="POST" id="getuserid" enctype="application/x-www-form-urlencoded">
<div>
<label for="name"> Enter User Name(s) (separate users by comma): </label>
<input type="text" id="name" name="name">
<button id="getuserid" type="submit"> Get ID </button>
</div>
</form>
</html>
ps:稍后我会将找到的用户 ID 保存为对象 ID 数组,以写入另一个集合,其中包含以 objectID 数组作为其模式的字段
解决方案
这$in
是正确的方法。我认为问题在于您拆分namearray
. 结果中有空格,这就是它与硬编码解决方案一起使用的原因。更改此行:
const namearray = req.body.name.split(',');
对此:
const namearray = req.body.name.split(', ');
推荐阅读
- azure - Azure Log Analytics - 未捕获 IIS 日志 (W3CIISLog)
- sitecore - 将“新建文件夹”按钮添加到 Sitecore 中的数据源选择器
- python - path('accounts/', include(accounts.urls)), NameError: name 'accounts' 没有定义
- python - 使用 post 方法提交表单时出错
- c++ - 如何将信号连接到静态成员的非静态方法
- tensorflow - 如何在 Ubuntu 上安装 Gprof?
- java - @Autowired 给出空指针异常
- angular - Angular 5:callbackParam 在使用 HTTPClient 的 JSONP 请求中不起作用
- string - groovy中的JSON结构字符串
- python - 类函数在 Python 中找不到位置参数自身