根据 MongoDB 查询结果递归的问题 - Nodejs版
根据 MongoDB 查询结果递归的问题 - Nodejs版
function doIteration(usersIds,userProfiles) {
if(userProfiles==null)
userProfiles=[];
let userId=usersIds.shift();
app.db.db().collection(“main”).findOne({tag: “DATA”, uId: userId}, (err, userData) => {
if(userData!=null)
userProfiles.push(userData);
if(usersIds.length!==0)
doIteration(usersIds,userProfiles);
else
proceed(userProfiles);
});
}
这么迭代可以么?特别的, usersIds 和 userProfiles 这两个变量,在 findOne 的回调里面和外面是同一个意思么?
如果你问 usersIds 和 userProfiles 在回调里外是不是同一个意思,那肯定是同一个意思的,我看你是想吧 usersIds 中所有的用户信息 userData 存到 userProfiles 中,应该是 ok 的
因为在 java 里面同样情况会有一个下划线的标记,我不知道在 js 里是什么样的限制。
find({
tag: “DATA”, uId: { $in: usersIds }
})
为什么要每次取一个 id 出来去查??? 一个查询就出来啦
我是新来的土包子,谢谢大哥指教。
在处理 MongoDB 查询结果的递归问题时,通常是因为你需要遍历一个嵌套结构的数据,比如嵌套的文档或数组。以下是一个使用 Node.js 和 MongoDB 的示例,展示如何递归地处理查询结果。
假设你的 MongoDB 集合中存储了如下结构的文档:
{
"_id": "1",
"name": "root",
"children": [
{
"_id": "2",
"name": "child1",
"children": [...]
},
...
]
}
你可以使用以下代码递归地遍历这些嵌套结构:
const { MongoClient } = require('mongodb');
async function recursiveFind(doc) {
console.log(doc.name);
if (doc.children && doc.children.length > 0) {
for (const child of doc.children) {
await recursiveFind(child);
}
}
}
async function main() {
const uri = 'your_mongodb_uri';
const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });
await client.connect();
const db = client.db('your_database');
const collection = db.collection('your_collection');
const doc = await collection.findOne({ _id: '1' });
await recursiveFind(doc);
await client.close();
}
main().catch(console.error);
在这个示例中,recursiveFind
函数会递归地遍历每个文档及其子文档,并打印它们的名称。注意,这里使用了 async/await
语法来处理异步操作,确保在遍历子文档时等待每个递归调用的完成。确保替换 your_mongodb_uri
、your_database
和 your_collection
为你的实际 MongoDB 连接字符串、数据库名和集合名。