node.js - 我想在对象数组中进行搜索
问题描述
我有一个带有“数据库”的集合,其中有一个包含对象的数组......我正在尝试使用他的关键字在这些对象中搜索,并且我只得到 1 个对象返回,我想返回所有包含关键词
搜索代码
Database.find({ 'data.words' : { "$in" : ["facebook"]}}, { 'data.$': 1, });
数据结构示例
{
"_id" : ObjectId("5e331a85ec9a8548744899a9"),
"uuid" : "XXXXX",
"data" : [
{
"words" : ["facebook"],
"status" : 0,
"uid" : "XXXXX",
"details" : {}
},
{
"words" : ["youtube", "facebook"],
"status" : 0,
"uid" : "XXXXX",
"details" : {}
}
}
解决方案
文档
{
"_id" : ObjectId("5e33fee6bc9987050fc40550"),
"uuid" : "XXXXX",
"data" : [
{
"words" : [
"facebook"
],
"status" : 0,
"uid" : "12345",
"details" : {}
},
{
"words" : [
"youtube",
"facebook"
],
"status" : 0,
"uid" : "34567",
"details" : {}
}
]
}
询问
var wordsList = ["facebook"];
db.collectionName.find({ 'data.words' : { "$in" : wordsList }})
.map(function(list){
var results = [];
list.data.forEach(function (dataListElement){
if(dataListElement.words.filter(value => wordsList.includes(value)).length > 0){
results.push(dataListElement);
}
})
return results;
}
);
结果
[
[
{
"words" : [
"facebook"
],
"status" : 0,
"uid" : "12345",
"details" : {}
},
{
"words" : [
"youtube",
"facebook"
],
"status" : 0,
"uid" : "34567",
"details" : {}
}
]
]
推荐阅读
- mysql - 如何根据最小日期行中的条件返回最大日期结果?
- python - Python:合并排序如何影响没有显式返回值的列表?
- c# - How to add to a queue via references without changing references accidently?
- javascript - Rock,Paper,Scissors Increment Score 不起作用,有人能告诉我我做错了什么吗?
- ruby - 为什么我的 Fiddle 结构被垃圾填满?
- javascript - ReactJS - Webpack 未捕获错误:未定义要求
- javascript - 自动播放嵌入的 youtube 直播
- c++ - C++ 程序 if 函数中的语句未执行。似乎逻辑错误
- java - 使用 java GUI 旋转图像
- c# - 我可以创建一个运行代码隐藏方法的自定义属性吗?