我的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);
上面代码中的图像将给出整个数组,而我只需要数组的第一个元素
答案 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);
});