迭代并保存游标 - MongoDB

时间:2015-08-13 01:06:40

标签: mongodb nosql

我在MongoDB中有这个数组:

enter image description here

我想迭代并对其进行查询:

> for(var i=0; i < AllegriTeams.length; i++) {a[i]=db.team.find({
_id:AllegriTeams[i].team_id}, {_id:0, official_name:1})}

数组a在循环结束时只包含前两个正式名称。我失去了最后一个官方名称。

1 个答案:

答案 0 :(得分:0)

您的循环看起来是正确的,并且不清楚为什么您不会在数组a中收到三个项目。

检查您的变量AllegriTeams是否包含三个元素。

> AllegriTeams.length
3

我模仿了您的设置,我收到了您期望a有三个元素的结果。这就是我的所作所为:

// 1. Log into mongo and use the "test" database, for example
> use test 

// 2. Create data
> db.team.insert({"_id": "Juv.26", "official_name":"Juv.26.xxx”})
WriteResult({ "nInserted" : 1 })
> db.team.insert({"_id": "Mil.74", "official_name":"Mil.74.xxx”})
WriteResult({ "nInserted" : 1 })
> db.team.insert({"_id": "Cag.00", "official_name":"Cag.00.xxx”})
WriteResult({ "nInserted" : 1 })

// 3. Create the AllegriTeams variable
> var AllegriTeams = [ { "team_id":"Juv.26"}, {"team_id":"Mil.74"}, {"team_id":"Cag.00"}]

// 4. Create the "a" array
> var a = []

// 5. Run the for loop. Consider using "findOne" instead of "find".
> for (var i=0; i < AllegriTeams.length; i++) { a[i]=db.team.find({ _id:AllegriTeams[i].team_id}, {_id:0, official_name:1})}
{ "official_name" : "Cag.00.xxx" }

// 6. Get length of "a"
> a.length
3

另外,请注意 find()函数将返回光标。因此,存储在a数组中的值将是游标值。考虑使用findOne()函数,因为它返回文档

再次,检查你的AllegriTeam变量有三个数组元素。