我有两个收藏夹,如下所示。
收藏1:列表
{
"_id" : ObjectId("5b618589d6edcc135c1aee0a"),
"name" : "ABC",
"special" : "Golmal",
"dim" : "2122",
}
集合2:数据
文档1:
{
"_id" : ObjectId("5b6023d9589ff6bfb5dd75d7"),
"date" : "2018/08/13",
"special" : "Golmal",
}
文档2:
{
"_id" : ObjectId("5b602447589ff6bfb5dd7606"),
"date" : "2018/08/13",
"special" : "Godman",
}
在这里我想比较集合,如果集合2文档中存在集合1的"special":"Golmal"
,我想显示/获取集合1文档中的所有相关日期。
我尝试了aggregate
和$lookup
如下
getAvailableList(): Promise<any> {
return this._mongoUtility.Db
.then(db => {
let list= db.collection('list');
let data= db.collection('data');
list.aggregate([{$lookup:
{
from: data,
localField: "special",
foreignField: "special",
as: "matches"
}
},
{
$match: { "matches": { $ne: [{}] } }
}
]);
return Promise.resolve();
})
.catch(err => {
return Promise.reject({message: 'Not found', err: err});
});
}
但是我得到的是空值。
我还通过如下方式使用.find
和forEach
let abc = [];
list.find({}).toArray()
.then(arr => {
arr.forEach(obj1 => {
data.find({special: obj1.special}).toArray()
.then(secondArr => {
console.log(secondArr);
if (secondArr.length > 0) {
abc.push(obj1);
}
});
});
});
return Promise.resolve();
但是没有结果。我需要JSON格式的值。由于MongoDB没有加入。有什么办法破解它?
答案 0 :(得分:1)
好吧,我通过不使用forEach
及其对我有用的方式来更改了执行该查询的方式。
我在mongoDB网站的$in
中遇到了find
。这就是答案
return new Promise((res, rej) => {
this._mongoUtility.Db
.then(db => {
let list= db.collection('List');
let data= db.collection('Data');
data.find({}).toArray()
.then(arr => {
let maps = arr.map(data => data.special);
list.find({special: {$in: maps}}).toArray()
.then(secondArr => {
res(secondArr);
});
});
})
.catch(err => {
return rej({message: 'Not found', err: err});
});
});
答案 1 :(得分:0)