【发布时间】:2020-10-04 02:01:17
【问题描述】:
我对 mongodb 很陌生,很难为我的用例找到解决方案。例如我有以下文件:
{
_id : ObjectId('5rtgwr6gsrtbsr6hsfbsr6bdrfyb'),
uuid : 'something',
mainArray : [
{
id : 1,
title: 'A',
array: ['lots','off','stuff']
},
{
id : 2,
title: 'B',
array: ['even','more','stuff']
}
]
}
我希望返回以下内容:
{
uuid : 'something',
mainArray : [
{
id : 1,
title: 'A'
},
{
id : 2,
title: 'B'
}
]
}
我尝试了将findOne() 和aggregate() 与$slice 和$project 结合使用的各种组合。使用findOne(),如果它确实有效,将返回who 文档。我无法测试是否尝试聚合工作,因为 .then((ret)=>{}) 承诺似乎不适用于我的 node.js(findOne 没有问题)。像这样调用函数
return db.myCollection.aggregate([
{
$match: {
_id:ObjectId(mongo_id)
}
},
{
$project : {
mainArray: {
id:1,
title:1
}
}
}
],function(err,res){
console.log(res)
return res
})
记录整个函数,而不是我正在寻找的机器人。
【问题讨论】:
-
对于只记录结果集,我认为你返回的是游标对象而不是结果集,试试
return db.myCollection.aggregate([matchCode,projectCode]).toArray().then(data => { console.log(res); return res; }, error => {console.log(error)}) -
另外,聚合函数中使用的 matchCode 和 projectCode 对象是什么?
-
谢谢,问题已解决!我对如何构建项目代码的直觉是有效的,缺少的一块拼图是
toArray()。我可以将 matchCode 和 projectCode 发给你,这样你至少可以把它作为我投票的答案。我很高兴我现在知道了,但是如何获得这样的知识呢?我在研究此问题时查看的任何网站和页面上都没有看到对它的引用。 -
很高兴为您提供帮助,我将参考 mongodb 文档添加答案。不需要您的查询对象,因为这不是问题。
标签: node.js arrays mongodb nested slice