我正在尝试查询一个巨大的 mongo 集合,其中包含大约 50 + 百万条记录。在 mongo 查询中,我只需要几个字段。文档中存在的对象 ID 和 MD5。为此,我做到了
询问 :
db.getCollection('experimental_engine').find({},{"md5":1,"_id":1})
Run Code Online (Sandbox Code Playgroud)
结果 :
/* 1 */
{
"_id" : "5cee41f2ca4e0ebf567ffd1be5cdaf1f",
"md5" : "1d813cb29082b13efe572e8088f006dd"
}
/* 2 */
{
"_id" : "fcd79aac0d5c5ebdfd0fa389368ab6f3",
"md5" : "13a1a6cd5c8f1c5eaf3d409f4d809889"
}
/* 3 */
{
"_id" : "2a0b42d01892bd9b7368d045a4c7862c",
"md5" : "2a0b42d01892bd9b7368d045a4c7862c"
}
................
Run Code Online (Sandbox Code Playgroud)
现在,我想同时匹配 "_id" 和 "md5" 并且只得到匹配的值 ( _id = md5) 。
mongo 命令是否支持两个键的匹配值?
请问有什么建议吗?
我想使用 mongodb 在附件数组中推送一个值。我想使用以下条件更新查询。
_id:ObjectId("5b56bd2f3e18580edc85af73") "cardID": ObjectId("5b56c895d0a04836f71aa776") "commentId":"2"
我想推动附件中的价值,任何帮助将不胜感激
这是一个集合对象:
{
"_id" : ObjectId("5b56bd2f3e18580edc85af73"),
"orgId" : "90",
"createdBy" : "test",
"name" : "testname",
"Cards" : [
{
"cardID" : ObjectId("5b56c895d0a04836f71aa776"),
"cardName" : "test Name",
"cardCreated" : "",
"reviewer" : "",
"priority" : "",
"cardPosition" : "",
"membersAssigned" : [
"ggg",
"fff"
],
"labels" : [
"l1",
"l2"
],
"description" : "",
"attachements" : [],
"comments" : [
{
"commentId" : "2",
"commentedBy" : "test",
"date" : "",
"comment" : "Hello world", …Run Code Online (Sandbox Code Playgroud) 我想知道一场演出中预订了多少个座位。
每个节目文档中都有一个“showTakenSeats”对象。
这是初始数据:
[
{
"_id": "5b658d37692f2e3c881960cb",
"_MovieId": "5b5835dd86ab401494263861",
"_TheaterId": "5b3dfeb217bc8c23f0e7ec3f",
"dateTime": "2018-08-04T14:00:00.000Z",
"showTakenSeats": {
"0-0": "5b658f79dd8bb938289e2e0b",
"0-1": "5b658f79dd8bb938289e2e0b",
"0-2": "5b658f79dd8bb938289e2e0b"
},
"__v": 0,
},
{
"_id": "5b658d4a692f2e3c881960cc",
"_MovieId": "5b584eb186ab401494263868",
"_TheaterId": "5b45d269a53b0c05f8959260",
"dateTime": "2018-08-04T13:00:00.000Z",
"showTakenSeats": {
"0-0": "5b65904bdd8bb938289e2e0d",
"0-1": "5b65904bdd8bb938289e2e0d",
"0-2": "5b65904bdd8bb938289e2e0d"
},
"__v": 0,
},
{
"_id": "5b658fd1dd8bb938289e2e0c",
"_MovieId": "5b575452478afb72ec65f8f6",
"_TheaterId": "5b45d219a53b0c05f895925f",
"dateTime": "2018-08-04T20:00:00.000Z",
"showTakenSeats": {},
"__v": 0,
},
{
"_id": "5b6593d80d48d9394877dd09",
"_MovieId": "5b584eb186ab401494263868",
"_TheaterId": "5b446a8768db4e2e980723ab",
"dateTime": "2018-08-05T10:00:00.000Z",
"showTakenSeats": {},
"__v": 0,
},
{
"_id": "5b65943b0d48d9394877dd0a",
"_MovieId": "5b584eb186ab401494263868",
"_TheaterId": …Run Code Online (Sandbox Code Playgroud) 我是新的 Mongodb 开发人员,我写了 mongodb 聚合。我的字段 lampStatus : "OFF" 是 30 条记录,我使用 "{ $match: {lampStatus : "OFF"}}" 我得到了 30 条记录,但是 ' lampStatus : "OFF" '没有记录我获取了 0 条记录,但如何在上述聚合中获取零值。
db.collection.aggregate([
{ $match:{'type':'L'}},
{ $match: {lampStatus : "ON"}},
{ $group: { _id : null, TotalLights: { $sum: 1 } } },
{ $project: { _id: 0, TotalLights: 1 } }
])
Run Code Online (Sandbox Code Playgroud)
输出:在 0 毫秒内获取 0 条记录
expected outout:"TotalLights" : 0
Run Code Online (Sandbox Code Playgroud) 我正在尝试过滤数组数组的列表,这是一个结构示例。
{
"array1": [
{
"array2": [
{
"array3": [
{
"sampleId": 1
},
{
"sampleId": 2
},
{
"sampleId": 5
}
]
},
{
"array3": [
{
"sampleId": 7
},
{
"sampleId": 8
}
]
}
]
},
{
"array2": [
{
"array3": [
{
"sampleId": 1
}
]
}
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
假设我想过滤掉 sampleId > 2 的所有子文档
这是预期结果的一个例子。
{
"array1": [
{
"array2": [
{
"array3": [
{
"sampleId": 1
},
{
"sampleId": 2
}
]
}, …Run Code Online (Sandbox Code Playgroud) 我在网上搜索过,但找不到与我的情况相符的内容。情况是这样的。
我正在使用聚合将一个集合和来自另一个集合的一个文档组合在一起
restaurants.aggregate([
{
$match: {
_id: {
$in: idList
}
}
},
{
$lookup: {
from: "tags",
localField: "details.restaurantType",
foreignField: "details.restaurantType._id",
as: "types"
}
},
{
$project: {
restaurantName: "$details.restaurantName",
restaurantType: "$details.restaurantType",
type: {
$filter: {
input: "$types",
as: "type",
cond: {
$eq: ["$$type._id", "$details.restaurantType"]
}
}
},
currency: "$details.currency",
costPerPax: "$details.costPerPax"
}
}
]);
Run Code Online (Sandbox Code Playgroud)
我当前结果中的“类型”字段是 [],我需要一个匹配的值
[
{
"id": "5c20c7a0036dda80a8baabcc",
"restaurantName": "Villagio Restaurant Sutera Mall",
"type": [],
"currency": "RM",
"costPerPax": 22,
},
{
"id": "5c20ceb07715216d3c217b7a",
"restaurantName": "Thai …Run Code Online (Sandbox Code Playgroud) 我的数据库具有这种类型的结构。我想查找“ JAN”数组包含的文档数。我正在尝试以不同的方式进行操作,但是没有任何效果。如果有人帮助的话,那会很棒。
{
"_id" : ObjectId("5cd8609db20663a19e2c362c"),
"2017" : {
"JAN" : [
{
"SYMBOL" : "20MICRONS",
"SERIES" : "EQ",
"OPEN" : "33.4",
"HIGH" : "34.3",
"LOW" : "33",
},
{
"SYMBOL" : "3IINFOTECH",
"SERIES" : "EQ",
"OPEN" : "5.8",
"HIGH" : "5.8",
"LOW" : "5.55",
},
{
"SYMBOL" : "3MINDIA",
"SERIES" : "EQ",
"OPEN" : "11199.9",
"HIGH" : "11233",
"LOW" : "10861",
}
]
}
}
Run Code Online (Sandbox Code Playgroud) 如何在文档中将日期增加 7 天,而无需手动设置日期?
Collection Data:
{
"_id" : ObjectId("5e302f83edd1fd00125abbf9"),
"dateTransferred" : 2020-01-26T00:00:00.000+00:00
}
Run Code Online (Sandbox Code Playgroud)
我可以使用以下方法轻松更新集合:
db.data.updateMany(
{},
{
"$set": { "dateTransferred": new ISODate("2020-02-03T03:34:54Z") }
}
)
Run Code Online (Sandbox Code Playgroud)
有没有办法可以动态更新它(类似于 DateAdd)
我的文档如下所示
doc = {
name: 'abc',
age:20
}
Run Code Online (Sandbox Code Playgroud)
我的查询看起来像
{ $expr: {$and:[{ $gt:[ "$age", 10 ] },
{ $regex:["$name",'ab']}
]
}
} }
Run Code Online (Sandbox Code Playgroud)
但它不起作用并且我收到错误
无法识别的表达式“$regex”
我怎样才能让它发挥作用?
我原来的查询看起来像这样
db.orders.aggregate([{
$match: {}},
{$lookup: {
from: "orders",
let: {
"customer_details": "$customerDetails"
},
pipeline: [
{
$match: {
$expr: {
$and: [
{ $or: [
{
$eq: ["$customerDetails.parentMobile","$$customer_details.parentMobile"]
},
{$eq: ["$customerDetails.studentMobile","$$customer_details.parentMobile"]
},
{$eq: ["$customerDetails.studentMobile","$$customer_details.parentMobile"]
},
{$eq: ["$customerDetails.studentMobile","$$customer_details.studentMobile"]
}
]
},
{$eq: ["$customerDetails.zipCode","$$customer_details.zipCode"]},
{$eq: ["$customerDetails.address","$$customer_details.address"]}
]
}
}
}],
as: "oldOrder"
}
}])
Run Code Online (Sandbox Code Playgroud)
我想用于regex …
我有一个 Mongo 集合,如下所示:
[{
id: 1,
timestamp: 1534488870841,
type: 'deposit'
}, {
id: 1,
timestamp: 1534488915119,
type: 'deposit'
}]
Run Code Online (Sandbox Code Playgroud)
如何查询以列出deposit按月份分组的所有交易。
必须使用timestamp属性(UNIX 毫秒)计算月份。
我可以按如下方式获得存款,但我不确定如何分组:
db.getCollection('transactions').find(
{"type":"deposit"});
Run Code Online (Sandbox Code Playgroud)
编辑:Mongo 3.4 版