使用 MongoDB _id 字段作为具有多个字段的复合字段
Use MongoDB _id field as composite field with multiple fields
由于 mongodb 中的每个 collection 在 _id 列上都有一个默认索引,我想在下面的场景中利用它。
我的 collection 如下,
{
"_id":{
"timestamp" : ISODate("2016-08-24T23:22:20.201Z"),
"departmentname" : "sales",
"city":"NJ"
}
//Other fields in my collection
}
有了这个结构我可以查询如下,
db.getCollection('test').find(
{
"_id" : {
"timestamp" : ISODate("2016-08-21T23:22:20.201Z"),
"departmentname" : "sales",
"city":"NJ"
}
}
)
但是,当我查询属于 _id 列的一个或多个字段时,如下所示,
db.getCollection('test').find(
{
"_id" : {
"timestamp" : ISODate("2016-08-21T23:22:20.201Z")
}
}
)
(或)
db.getCollection('test').find(
{
"_id" : {
"departmentname" : "sales"
}
}
)
(或)
db.getCollection('test').find(
{
"_id" : {
"departmentname" : "sales",
"city":"NJ"
}
}
)
我没有看到任何返回的文件
当我检查 .explain() 时,我发现它使用了索引但没有找到任何文档。
此外,我想对时间戳字段进行日期范围查询,同时对 _id 列中的一个或多个字段进行查询,如下所示,
db.getCollection('test').find(
{
"_id.timestamp" : {
"$gte": ISODate("2011-08-21T23:22:20.201Z")
},
"_id.departmentname" : "sales"
}
)
但是,我没有看到任何返回的文件。当我 运行 .explain() 我看到它使用了 colscan 而不是 index.
谁能帮助我正确查询 _id 列中的一个或多个字段。
谢谢,
斯里
您可以尝试以下查询,第一种情况:-
db.getCollection('test').find(
{
"_id.timestamp" : ISODate("2016-08-21T23:22:20.201Z")
})
这适用于多个字段:
db.getCollection('test').find(
{
"_id.timestamp" : ISODate("2016-08-21T23:22:20.201Z"),
"_id.departmentname" : "sales",
})
由于 mongodb 中的每个 collection 在 _id 列上都有一个默认索引,我想在下面的场景中利用它。
我的 collection 如下,
{
"_id":{
"timestamp" : ISODate("2016-08-24T23:22:20.201Z"),
"departmentname" : "sales",
"city":"NJ"
}
//Other fields in my collection
}
有了这个结构我可以查询如下,
db.getCollection('test').find(
{
"_id" : {
"timestamp" : ISODate("2016-08-21T23:22:20.201Z"),
"departmentname" : "sales",
"city":"NJ"
}
}
)
但是,当我查询属于 _id 列的一个或多个字段时,如下所示,
db.getCollection('test').find(
{
"_id" : {
"timestamp" : ISODate("2016-08-21T23:22:20.201Z")
}
}
)
(或)
db.getCollection('test').find(
{
"_id" : {
"departmentname" : "sales"
}
}
)
(或)
db.getCollection('test').find(
{
"_id" : {
"departmentname" : "sales",
"city":"NJ"
}
}
)
我没有看到任何返回的文件
当我检查 .explain() 时,我发现它使用了索引但没有找到任何文档。
此外,我想对时间戳字段进行日期范围查询,同时对 _id 列中的一个或多个字段进行查询,如下所示,
db.getCollection('test').find(
{
"_id.timestamp" : {
"$gte": ISODate("2011-08-21T23:22:20.201Z")
},
"_id.departmentname" : "sales"
}
)
但是,我没有看到任何返回的文件。当我 运行 .explain() 我看到它使用了 colscan 而不是 index.
谁能帮助我正确查询 _id 列中的一个或多个字段。
谢谢,
斯里
您可以尝试以下查询,第一种情况:-
db.getCollection('test').find(
{
"_id.timestamp" : ISODate("2016-08-21T23:22:20.201Z")
})
这适用于多个字段:
db.getCollection('test').find(
{
"_id.timestamp" : ISODate("2016-08-21T23:22:20.201Z"),
"_id.departmentname" : "sales",
})