我有以下格式我蒙戈实例文档中检索特定元素的数据,查找查询发现MongoDB中
{
"_id" : "08d4a242-08fb-07f7-46e5-8717a81d5b70",
"fname" : "john",
"created_date" : ISODate("2017-05-24T01:13:06.829Z"),
"customProp" : [
[
"customX","{\"some data related to X \"}"
],
[
"customY","{\"some data related to Y \"}"
],
[
"customZ","{\"some data related to Z \"}"
]
]
}
元素/值分别为“customX”,“customY “&”customZ“不一定在所有文档中。如何检索“customProp”数组的第二个元素中的所有值,在本文档中它包含“customZ”?
我能使用下面的查询过滤&找到所有这些有“customZ”元素的文件,
db.getCollection('col1').find({$and : [{"customProp":{$elemMatch:{0:"customZ"}}}, {"created": { $gte: ISODate("2017-05-22T00:00:00.000Z") }}] },{"created":1}).limit(1) .pretty()
输出:
{
"_id" : "08d4a242-08fb-07f7-46e5-8717a81d5b45",
"created" : ISODate("2017-05-24T01:13:06.829Z")
}
而是寻找一种方法来检索所有数组第二个元素中第一个值为“customZ”的值。
预期的结果:
{
"_id" : "08d4a242-08fb-07f7-46e5-8717a81d5b45",
"created" : ISODate("2017-05-24T01:13:06.829Z"),
"customPro": ["customZ","{\"some data related to Z \"}"]
}
我很好,如果我的查询只返回
{
"{\"some data related to Z \"}"
}
如果是我,我会改变我的数据模型,这样我就不会在对象中存储JSON字符串。而是存储对象的实际属性。 – bhspencer
@Veeram其实很不一样。另外,OP实际上已经知道如何正确地将'elemMatch'应用到他们的案例中。这只是他们需要帮助的投影的另一部分。 –