在mongodb

时间:2015-11-09 12:09:24

标签: arrays json node.js mongodb

我的json结构如下所示

{ 
    "_id" : ObjectId("563872d997e343d8437e30ce"), 

    "bookId" : NumberInt(1), 
    "updateAt" : ISODate("2015-11-03T08:39:53.633+0000"), 
    "createdAt" : ISODate("2015-11-03T08:39:53.632+0000"), 

    "Images" : [
        {
            "path" : "/opt/bookish/uploads/e11de938d3394622b77f85904a0fbfba.jpg", 
            "contentType" : "image/jpg", 
            "imageName" : "e11de938d3394622b77f85904a0fbfba.jpg", 
            "_id" : ObjectId("563dd28f9305a68548e71f89")
        },
{
            "path" : "/opt/bookish/uploads/e11de938d3394622b77f85904a0fbfba.jpg", 
            "contentType" : "image/jpg", 
            "imageName" : "e11de938d3394622b77f85904a0fbfba.jpg", 
            "_id" : ObjectId("563dd28f9305a68548e71f89")
        },
{
            "path" : "/opt/bookish/uploads/e11de938d3394622b77f85904a0fbfba.jpg", 
            "contentType" : "image/jpg", 
            "imageName" : "e11de938d3394622b77f85904a0fbfba.jpg", 
            "_id" : ObjectId("563dd28f9305a68548e71f89")
        }
    ], 


}

这里我们有一个图像数组,如何只获取数组中的第一个图像以及bookid

Books.find({},'bookId Title Author PublishedDate ShortDesc Images isDeleteBook isPublished',function(err,books){
        if(err)
            res.send(err);
            res.header("Access-Control-Allow-Origin", "*");
      res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
      console.log("++++++++++++++++++++++++");
      console.log(books);
      if(books.Images){
          console.log(books.Images.length);
      }
      res.send(books);

上面代码中的图像将给出整个数组,而我只需要数组的第一个元素

1 个答案:

答案 0 :(得分:0)

要仅获取数组中的第一个图像以及bookId,您可以使用 $ projection 运算符,该运算符根据查询语句中的某些条件投影数组元素。在您的情况下,您的查询语句将使用点表示法来查询至少包含元素的Images数组:

Books.find({"Images.0": { "$exists": true} }, {"bookId": 1, "Images.$": 1}, function(err, books){
    if(err)  res.send(err);
    console.log(books);
    res.send(books);
});

或者,您可能需要使用 $slice 投影运算符来控制查询返回的数组的项数。在下面的查询中, $slice 会选择Images字段中数组中的第一项:

Books.find({}, { "bookId": 1, "Images": { "$slice": 1 } }, function(err, books){
    if(err)  res.send(err);
    console.log(books);
    res.send(books);
});