MongoDb 只获取一个子文档和整个文档
MongoDb get only one sub document along with the whole document
所以我有一个包含嵌套图像文档的产品文档。
结构是这样的:
{
"_id" : ObjectId("551e617eccfff2fc193c9869"),
"currency" : "US DOllar",
"images" : [
{
"filename" : "551e617eccfff2fc193c9869_logo-big.jpg",
"height" : NumberLong(500),
"width" : NumberLong(500),
"updated_at" : ISODate("2015-04-07T10:35:10.142Z"),
"created_at" : ISODate("2015-04-03T09:53:31.168Z"),
"_id" : ObjectId("551e631bccfff278173c9869"),
"deleted_at" : ISODate("2015-04-03T09:53:43.102Z")
},
{
"filename" : "551e617eccfff2fc193c9869_sameer.jpg",
"height" : NumberLong(500),
"width" : NumberLong(500),
"updated_at" : ISODate("2015-04-03T10:00:39.969Z"),
"created_at" : ISODate("2015-04-03T10:00:39.969Z"),
"_id" : ObjectId("551e64c7ccfff200173c9869")
}
],
"is_active" : "1",
"updated_at" : ISODate("2015-04-07T08:05:15.932Z"),
"created_at" : ISODate("2015-04-03T09:46:38.340Z"),
}
现在我只想要一个子文档,即 filename
为“551e617eccfff2fc193c9869_logo-big.jpg” 的图像以及整个文档。
我怎样才能做到这一点?
所以我在 mongo 中得到了答案..现在我怎么能在 laravel 中用 jessenger/mongo-db 包..
要找到它,您应该使用以下查询。
db.collectionName.find({"images.filename":"551e617eccfff2fc193c9869_logo-big.jpg"},{"images.$.filename":1,"currency":1}).pretty()
使用$elemMatch
投影运算符
db.product.find(
{"images.filename": "551e617eccfff2fc193c9869_logo-big.jpg"},
{
"images": {
"$elemMatch": {"filename": "551e617eccfff2fc193c9869_logo-big.jpg"}
},
"currency": 1, "is_active": 1, "updated_at": 1, "created_at": 1
}
)
或者您也可以使用 $ projection
运算符:
db.product.find(
{"images.filename": "551e617eccfff2fc193c9869_logo-big.jpg"},
{
"images.$": 1, "currency": 1, "is_active": 1, "updated_at": 1, "created_at": 1
}
)
所以我有一个包含嵌套图像文档的产品文档。 结构是这样的:
{
"_id" : ObjectId("551e617eccfff2fc193c9869"),
"currency" : "US DOllar",
"images" : [
{
"filename" : "551e617eccfff2fc193c9869_logo-big.jpg",
"height" : NumberLong(500),
"width" : NumberLong(500),
"updated_at" : ISODate("2015-04-07T10:35:10.142Z"),
"created_at" : ISODate("2015-04-03T09:53:31.168Z"),
"_id" : ObjectId("551e631bccfff278173c9869"),
"deleted_at" : ISODate("2015-04-03T09:53:43.102Z")
},
{
"filename" : "551e617eccfff2fc193c9869_sameer.jpg",
"height" : NumberLong(500),
"width" : NumberLong(500),
"updated_at" : ISODate("2015-04-03T10:00:39.969Z"),
"created_at" : ISODate("2015-04-03T10:00:39.969Z"),
"_id" : ObjectId("551e64c7ccfff200173c9869")
}
],
"is_active" : "1",
"updated_at" : ISODate("2015-04-07T08:05:15.932Z"),
"created_at" : ISODate("2015-04-03T09:46:38.340Z"),
}
现在我只想要一个子文档,即 filename
为“551e617eccfff2fc193c9869_logo-big.jpg” 的图像以及整个文档。
我怎样才能做到这一点?
所以我在 mongo 中得到了答案..现在我怎么能在 laravel 中用 jessenger/mongo-db 包..
要找到它,您应该使用以下查询。
db.collectionName.find({"images.filename":"551e617eccfff2fc193c9869_logo-big.jpg"},{"images.$.filename":1,"currency":1}).pretty()
使用$elemMatch
投影运算符
db.product.find(
{"images.filename": "551e617eccfff2fc193c9869_logo-big.jpg"},
{
"images": {
"$elemMatch": {"filename": "551e617eccfff2fc193c9869_logo-big.jpg"}
},
"currency": 1, "is_active": 1, "updated_at": 1, "created_at": 1
}
)
或者您也可以使用 $ projection
运算符:
db.product.find(
{"images.filename": "551e617eccfff2fc193c9869_logo-big.jpg"},
{
"images.$": 1, "currency": 1, "is_active": 1, "updated_at": 1, "created_at": 1
}
)