在mongodb中遍历数组文档

时间:2018-08-01 11:45:14

标签: javascript arrays mongodb meteor

我有一个名为cartItems的MongoDB文档,它是一个数组。

"cartItems" : [    

    {
         "productID" : "2ae6b8013ade44ac60de872f",
        "quantity" : 5
    }, 

    {
        "productID" : "1ae2b8013ade32ac60de872d",
        "quantity" : 5
    },

    {
        "productID" : "6ae9b8023ade44ac60de8732",
        "quantity" : 5
    }, 

    {
        "productID" : "3ae9b96d3ade43ac60de8734",
        "quantity" : 5
    }
]

现在,我想遍历它并获取“ productID”的值。 我尝试使用.length(后来意识到这是一件很菜鸟的事),并且只给出了第一个productID。

  var user = Cart.find({"_id":Meteor.userId()}).fetch()[0];
      for(i=0;i<user.cartItems.length; i++){
          var id = new Mongo.ObjectID(user.cartItems[i].productID);
          console.log(id);
      }

我也尝试使用$ size,但是由于我的文档是动态数组,所以我不知道之前有多少种产品。

我们将不胜感激。

2 个答案:

答案 0 :(得分:0)

在mongo shell或robomongo中尝试

 var user = db.col.find({}).toArray()[0];
 for(i=0;i<user.cartItems.length; i++){
    printjson(ObjectId(user.cartItems[i].productID));
 }

答案 1 :(得分:0)

好吧,我对mongoDB没有任何经验,但这是一个如何遍历对象的每个元素的示例:
(我知道您的问题是loop,如果没有的话,请告诉我)

var user ={ "cartItems": [  
    {
      "productID": "2ae6b8013ade44ac60de872f",
      "quantity": 5
    }, 
    {
      "productID": "1ae2b8013ade32ac60de872d",
      "quantity": 5
    },
    {
      "productID": "6ae9b8023ade44ac60de8732",
      "quantity": 5
    }, 
    {
      "productID": "3ae9b96d3ade43ac60de8734",
      "quantity": 5
    }
]}

var cartItems = user.cartItems;
for (var item of cartItems){
   let id = item.productID;
   console.log("Id: " + id);
}

可能,使用mongo,您可以使用for..of以相同的方式进行操作:

var user = Cart.find({"_id":Meteor.userId()}).fetch()[0];
for(var item of user.cartItems){
   let id = new Mongo.ObjectID(item.productID);
   console.log(id);
}

对不起,如果我在这里说废话,因为正如我说的那样,我没有mongo的经验,但这也许会有所帮助...