【问题标题】:Retrive first element in the array of the document in mongodb在mongodb中检索文档数组中的第一个元素
【发布时间】:2015-11-09 22:25:37
【问题描述】:

我的 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);

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

【问题讨论】:

  • 或者基本上使用$slice。即Books.find({},{ "Images": { "$slice": 0 } })

标签: arrays json node.js mongodb


【解决方案1】:

要仅从数组中获取第一张图像以及 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);
});

【讨论】:

    猜你喜欢
    • 2016-06-28
    • 1970-01-01
    • 2022-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多