MongoDB 및 Nodejs를 사용한 날짜 삽입 및 쿼리
mongodb와 nodejs에서 날짜별로 기록을 찾는 데 도움이 필요합니다.
다음과 같이 스크레이핑 스크립트에서 json 개체에 날짜를 추가합니다.
jsonObj.last_updated = new Date();
이 개체가 mongodb에 삽입되었습니다.다음과 같이 볼 수 있습니다.
"last_updated" : "2014-01-22T14:56:59.301Z"
그런 다음 nodejs 스크립트에서 findOne()을 수행합니다.
var jObj = JSON.parse(line.toString());
collection.findOne(jObj,function(err, doc) {
if (doc){
console.log(doc._id);
} else {
console.log('not found');
}
});
개체를 찾을 수 없습니다.개체에서 last_update된 필드를 제거하면 해당 필드가 발견되므로 문제가 발생한 위치가 확실합니다.
필드를 다음과 같이 분리하는 경우:
collection.findOne({last_updated: '2014-01-22T14:56:59.301Z'},function(err, doc) {
if (doc){
console.log(doc._id);
} else {
console.log('not found');
}
});
아무 것도 돌아오지 않습니다.내가 뭘 잘못하고 있는 거지?
날짜 문자열이 아닌 날짜 개체를 전달해야 합니다.
collection.findOne({last_updated: new Date('2014-01-22T14:56:59.301Z')},function(err, doc) {
MongoDB 드라이버는 그것을 다음으로 변환할 것입니다.ISODate:
{
"_id" : ObjectId("52dfe0c469631792dba51770"),
"last_updated" : ISODate('2014-01-22T14:56:59.301Z')
}
다음 질문을 확인하십시오.
명확히 하기 위해서요.알아야 할 중요한 것은 다음과 같습니다.
- 예, 당신은 Javascript Date 객체를 전달해야 합니다.
- 예, isodate friendly여야 합니다.
- 예, 제 경험에 비추어 볼 때 ISO로 날짜를 조정해야 합니다.
- 예, 날짜 작업은 일반적으로 항상 지루한 프로세스이며, 몽고도 예외는 아닙니다.
이것은 Mongo가 정확하게 처리할 수 있도록 약간의 날짜 조작을 하는 코드의 작동하는 부분입니다.이 예에서는 mongoose 모듈을 사용하고 있으며 date 속성이 myDate 매개 변수로 지정된 날짜보다 작은(즉, 이전) 행에 대한 결과를 원합니다.
var inputDate = new Date(myDate.toISOString());
MyModel.find({
'date': { $lte: inputDate }
})
최근에 같은 문제가 발생했는데 추가 정보를 추가하고 싶습니다.
다음 두 가지 방법으로 날짜를 삽입할 수 있습니다.
- nodejs 서버 측에서 작성됨(예: Express에서 작성됨)JS 스크립트)
예: 새 개체를 삽입하고 타임스탬프를 기록합니다.
db.collection('mycollection').findOneAndUpdate({'name': req.body.name}, {
// only "update" if it's an insert, meaning name is not found
$setOnInsert: {
'name': req.body.name,
'date_added': new Date()
}
}, {
upsert: true
}, (err, result) => {
if(err) return res.send(err);
res.send(result);
});
- JS에서 클라이언트 측에서 생성된 후 POST 요청을 통해 JSON 객체의 REST API를 사용하여 유선으로 전송됩니다.
예:
// Send POST Request here
fetch('addDate', {
method: 'post',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
'date_added': new Date()
})
})
1. 및 2.의 경우. 다음을 사용하여 날짜를 만듭니다.new Date('2014-01-22T14:56:59.301Z')위의 답변에 설명된 대로 기능합니다.차이점은 MongoClient 패키지를 사용하여 서버 측에서 1.과 같이 수행하면 다음과 같이 저장됩니다.ISODate('2014-01-22T14:56:59.301Z')MongoDB에서.클라이언트 측에서 2와 같이 수행하면 문자열로 저장됩니다.'2014-01-22T14:56:59.301Z'MongoDB에서.
사용해야 하는 ISODate 개체를 쿼리하려면new Date('2014-01-22T14:56:59.301Z')또는ISODate('2014-01-22T14:56:59.301Z')문자열을 쿼리하려면 문자열만 사용합니다.'2014-01-22T14:56:59.301Z'
다음은 mongo 셸을 사용하는 몇 가지 쿼리 샘플입니다.
문자열로 저장된 날짜:
db.mycollection.findOne({date_added {$gte:'2018-06-22T00:07:53.688Z'}})
반환됩니다.
{
"_id" : ObjectId("5b2c3dd90078ce3cd484ef21"),
"name" : "alfons",
"date_added" : "2018-06-22T00:07:53.688Z"
}
ISO 날짜로 저장된 날짜:
db.mycollection.findOne({date_added: {$lte: ISODate('2018-06-26T23:24:37.023Z')}})
또는 "새 날짜"를 대신 사용합니다.
db.mycollection.findOne({date_added: {$lte: new Date('2018-06-26T23:24:37.023Z')}
다음이 반환됩니다.
{
"_id" : ObjectId("5b2bb21e1954b104e61ff735"),
"name" : "ceasar",
"date_added" : ISODate("2018-06-21T14:11:41.323Z")
}
스키마 및 값의 기본 키를 Date.now()에 추가합니다.
타임스탬프 데이터를 사용하여 쿼리하는 경우.EG : "createdAt" : "2021-07-12T 16:06:34.949Z"
const start = req.params.id; //2021-07-12
const data = await Model.find({
"createdAt": {
'$gte': `${start}T00:00:00.000Z`,
'$lt': `${start}T23:59:59.999Z`
}
});
console.log(data);
이 경우 특정 날짜의 데이터를 보여줍니다."2021-07-12"
언급URL : https://stackoverflow.com/questions/21286599/inserting-and-querying-date-with-mongodb-and-nodejs
'programing' 카테고리의 다른 글
| Azure Function App에서 Azure 스토리지 큐 조절 처리 (0) | 2023.05.25 |
|---|---|
| SQL Server에서 주의 첫 번째 요일 가져오기 (0) | 2023.05.25 |
| Bash에서 하위 문자열 추출 (0) | 2023.05.25 |
| 다른 지점으로 전환하려면 어떻게 해야 합니까? (0) | 2023.05.25 |
| C++ 표준::쌍의 C# 아날로그는 무엇입니까? (0) | 2023.05.25 |