Cara menggunakan allowdiskuse mongodb

Jika Anda ingin bekerja dengan kursor tanpa membongkar ke Array, Anda tidak dapat'tidak dapat menggunakan await dengan fungsi find () atau aggregate (), maka Anda harus menggunakan kode:

UPD oleh Usas: Untuk kasus umum, jawaban menggunakan toArray() sudah cukup.

Tetapi ketika koleksi dokumen yang besar terlibat, menggunakan toArray() akan melebihi RAM yang tersedia. Dengan demikian solusi "kinerja tinggi &" dalam situasi tersebut tidak boleh menggunakan toArray().

Untuk kasus-kasus tersebut, Anda dapat menggunakan stream MongoDB, yang bekerja dengan baik, tetapi bahkan lebih sederhana daripada menggunakan stream adalah dengan:

AggregateOptionsAllowDiskUse Property

Gets or sets a value indicating whether to allow disk use.

Namespace: MongoDB.Driver
Assembly: MongoDB.Driver (in MongoDB.Driver.dll) Version: 2.3.0

Cara menggunakan allowdiskuse mongodb
Syntax

public Nullable<bool> AllowDiskUse { get; set; }

Property Value

Type: NullableBoolean

Cara menggunakan allowdiskuse mongodb
See Also

Reference

larutan

Temukan duplikat yang bukan null mongodb (Find duplicates that are not null mongodb)

Saya sedang menulis skrip deduplikasi di mongo tetapi mereka mengembalikan nomor ponsel yang sama dengan null atau string kosong, mengira itu semua duplikat. Saya sudah mencoba bermain‑main dengan $ne di mongo tetapi tidak bisa membuatnya berfungsi. Adakah yang tahu cara mengembalikan semua duplikat bahwa nomor ponsel tidak sama dengan null atau string kosong?

    $mobile_duplicates = User::raw(function ($collection) {
        return $collection‑>aggregate(
            [
                [
                    '$limit' => 200000,
                ],
                [
                    '$group' => [
                        '_id' => [
                            'mobile', //=> '$mobile',
                        ],
                        'uniqueIds' => [
                            '$addToSet' => '$_id',
                        ],
                        'count' => [
                            '$sum' => 1,
                        ],
                    ],
                ],
                [
                    '$match' => [
                        // '_id' => [
                        //    '$ne' => "",
                        // ],
                        // '_id' => [
                        //    '$ne' => null,
                        // ],
                        'count' => [
                            '$gt' => 1,
                        ],
                    ],
                ]
            ],
            [
                'allowDiskUse' => true,
            ]
        );
    });

Terima kasih sebelumnya!


larutan

larutan 1:

found the answer in this post! stackoverflow.com/questions/14184099/… (to separate the $match queries into two different ones ‑ this worked for me:

$mobile_duplicates = User::raw(function ($collection) {
        return $collection‑>aggregate(
            [
                [
                    '$match' => [
                        'mobile' => [
                            '$ne' => '',
                            '$exists' => true,
                        ],
                    ],
                ],
                [
                    '$group' => [
                        '_id' => [
                            'mobile' => '$mobile',
                        ],
                        'uniqueIds' => [
                            '$addToSet' => '$_id',
                        ],
                        'count' => [
                            '$sum' => 1,
                        ],
                    ],
                ],
                [
                    '$match' => [
                        'count' => [
                            '$gt' => 1,
                        ],
                    ],
                ],
            ],
            [
                'allowDiskUse' => true,
            ]
        );
    });

(by chloealee、chloealee)

larutan

  1. Find duplicates that are not null mongodb (CC BY‑SA 2.5/3.0/4.0)

#mongoDB

Pada tutorial ini Anda akan belajar bagaimana membuat search dan pagination menggunakan node.js, express, MySQL, dan React JS.

Table of Contents

  • #1. Install Express, MySQL2, Nodemon, dan Cors
  • #2. Buat database
  • #3. Struktur Aplikasi
  • #4. Connect ke Database
  • #6. Controllers
  • #8. Entry Point
  • #9. Insert Data
  • #10. Front-End
  • #11. Components
  • #12. App.js
  • #13. index.js
  • #14. Testing
  • Kesimpulan:

Tidak hanya itu,

Anda juga akan belajar bagaimana mengoptimalkan pagination, sehingga performa aplikasi kita akan sangat cepat meskipun dengan jumlah data yang sangat banyak.

Selain itu, Anda juga akan belajar menggunakan Bulma CSS untuk style pada frontend.

Dengan demikian, aplikasi yang dibangun menjadi lebih user friendly dengan user interface (UI) yang elegan dan responsif.

Ini bukan tutorial untuk pemula,

Jika Anda seorang pemula di node.js express, saya sarankan Anda terlebih dahulu mempelajari “Tutorial Express Js Untuk Pemula”.

Dan jika Anda pemula di React JS, saya sarankan Anda terlebih dahulu mempelajari “Tutorial React Js Untuk Pemula”.

Mari kita mulai.

#1. Install Express, MySQL2, Nodemon, dan Cors

Buat sebuah folder di komputer Anda, di sini saya beri nama “pagination”.

Jika Anda membuat folder dengan nama yang sama, itu lebih baik.

Anda bebas membuatnya di manapun, baik di C, D, ataupun di Desktop.

Kemudian buka folder “pagination” tersebut menggunakan code editor, disini saya menggunakan Visual Studio Code.

Saya juga menyarankan Anda untuk menggunakan Visual Studio Code.

Anda dapat mendownload Visual Studio Code pada link berikut, kemudian install di komputer Anda:

https://code.visualstudio.com/

Setelah folder “pagination” ter-open menggunakan Visual Studio Code, buat sebuah sub folder bernama “backend” di dalam folder “pagination”.

Selanjutnya, buka terminal pada Visual Studio Code. Kemudian, masuk ke folder “backend” dengan mengetikan perintah berikut pada terminal:

cd backend

Setelah itu, ketikkan perintah berikut pada terminal untuk membuat file “package.json”:

npm init -y

Selanjutnya, install express, mysql2, sequelize dan cors dengan mengetikan perintah berikut pada terminal:

npm i express mysql2 sequelize cors

Selanjutnya, install nodemon secara global dengan mengetikan perintah berikut pada terminal:

npm install -g nodemon

Selanjutnya, tambahkan kode berikut pada file “package.json”:

"type": "module",

Sehingga file “package.json” terlihat menjadi seperti berikut:

{
  "name": "backend",
  "version": "1.0.0",
  "description": "",
  "type": "module",
  "main": "index.js",
  "scripts": {
    "test": "echo "Error: no test specified" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "cors": "^2.8.5",
    "express": "^4.18.1",
    "mysql2": "^2.3.3",
    "sequelize": "^6.20.1"
  }
}

Hal ini bertujuan agar kita dapat menggunakan ES6 Module Syntax untuk export dan import module.

#2. Buat database

Untuk dapat menggunakan MySQL, Anda perlu menginstall XAMPP, WAMP, MAMP, atau software sejenisnya.

Pada tutorial ini, saya menggunakan XAMPP.

Kemudian buat database baru pada MySQL, Anda dapat menggunakan tools seperti SQLyog, PHPMyAdmin atau sejenisnya.

Disini saya membuat database dengan nama “paginate_db”.

Jika Anda membuat database dengan nama yang sama, itu lebih baik.

Untuk  membuat database pada MySQL, dapat dilakukan dengan mengeksekusi query berikut:

CREATE DATABASE paginate_db;

Perintah SQL diatas akan membuat sebuah database dengan nama “paginate_db”.

#3. Struktur Aplikasi

Agar aplikasi lebih terstruktur rapi, kita akan menerapkan pola MVC (Model-View-Controllers).

Buat folder “config”, “controllers”, “models”, dan “routes” di dalam folder “backend”.

Kemudian buat file “Database.js” di dalam folder “config”, buat file “UserController.js” di dalam folder “controllers”, buat file “UserModel.js” di dalam folder “models”, buat file “UserRoutes.js” di dalam folder “routes”, dan buat file “index.js” di dalam folder “backend”.

Perhatikan gambar berikut untuk lebih jelasnya:

#4. Connect ke Database

Buka file “Database.js” yang terdapat pada folder “config”, kemudian ketikan kode berikut:

import {Sequelize} from "sequelize";

const db = new Sequelize('paginate_db','root','',{
    host: 'localhost',
    dialect: 'mysql'
});

export default db;

#5. Models

Buka file model “UserModel.js” yang terdapat pada folder “models”, kemudian ketikan kode berikut:

import {Sequelize} from "sequelize";
import db from "../config/Database.js";

const {DataTypes} = Sequelize;

const User = db.define('users',{
    name: DataTypes.STRING,
    email: DataTypes.STRING,
    gender: DataTypes.STRING
},{
    freezeTableName: true
});

export default User;

(async()=>{
    await db.sync();
})();

#6. Controllers

Buka file controller “UserController.js” yang terdapat pada folder “controllers”, kemudian ketikan kode berikut:

import User from "../models/UserModel.js";
import {Op} from "sequelize";

export const getUsers = async(req, res) =>{
    const page = parseInt(req.query.page) || 0;
    const limit = parseInt(req.query.limit) || 10;
    const search = req.query.search_query || "";
    const offset = limit * page;
    const totalRows = await User.count({
        where:{
            [Op.or]: [{name:{
                [Op.like]: '%'+search+'%'
            }}, {email:{
                [Op.like]: '%'+search+'%'
            }}]
        }
    }); 
    const totalPage = Math.ceil(totalRows / limit);
    const result = await User.findAll({
        where:{
            [Op.or]: [{name:{
                [Op.like]: '%'+search+'%'
            }}, {email:{
                [Op.like]: '%'+search+'%'
            }}]
        },
        offset: offset,
        limit: limit,
        order:[
            ['id', 'DESC']
        ]
    });
    res.json({
        result: result,
        page: page,
        limit: limit,
        totalRows: totalRows,
        totalPage: totalPage
    });
}

#7. Routes

Buka file “UserRoutes.js” yang terdapat pada folder “routes”, kemudian ketikan kode berikut:

import express from "express";
import { getUsers } from "../controllers/UserController.js";

const router = express.Router();

router.get('/users', getUsers);

export default router;

#8. Entry Point

Buka file “index.js” yang terdapat pada folder “backend”, kemudian ketikan kode berikut:

import express from "express";
import cors from "cors";
import UserRoutes from "./routes/UserRoutes.js";

const app = express();
app.use(cors());
app.use(express.json());
app.use(UserRoutes);

app.listen('5000', ()=> console.log('Server up and Running...'));

Kemudian jalankan aplikasi dengan mengetikan perintah berikut pada terminal:

nodemon index

Jika berjalan dengan baik, maka akan terlihat seperti gambar berikut:

#9. Insert Data

Kemudian insert beberapa data pada table “users”.

Disini saya telah memiliki 100 ribu data yang bisa Anda download di Source Codenya DI SINIyaitu pada file “users.sql”.

Kemudian import ke dalam table “users”.
Anda dapat menggunakan tools seperti SQL Yog atau tools sejenisnya untuk import data.

Sampai disini Anda telah selesai membuat “backend”.

Untuk memastikan backend berjalan dengan baik, Anda dapat menggunakan POSTMAN atau extensions REST Client pada VS Code untuk melakukan pengujian.

#10. Front-End

Untuk front-end, saya akan menggunakan React JS.

Untuk membuat project react js, dapat dilakukan dengan banyak cara. Akan tetapi cara yang paling mudah adalah “create react app”.

Buka new terminal dan buat project react baru dengan mengetikan perintah berikut pada terminal:

npx create-react-app frontend

Dan pastikan Anda berada di folder “pagination”, seperti gambar berikut:

Jika instalasi selesai, maka akan terdapat folder “frontend” di dalam folder “pagination”.

Sehingga di dalam folder “pagination” terdapat dua folder yaitu: “backend” dan “frontend” seperti gambar berikut:

Folder “backend” merupakan folder aplikasi yang dibangun sebelumnya menggunakan node.js express, sedangkan “frontend” merupakan folder aplikasi yang dibuat menggunakan React JS.

Selanjutnya, masuk kedalam folder “frontend” dengan mengetikan perintah berikut pada terminal:

cd frontend

Setelah itu, install react-paginate, axios, dan bulma dengan mengetikan perintah berikut pada terminal:

npm i react-paginate axios bulma

Setelah instalasi selesai, dan untuk memastikan semuanya berjalan dengan baik, ketikan perintah berikut untuk menjalankan project:

npm start

Jika berjalan dengan baik, maka akan tampil seperti gambar berikut:

#11. Components

Buat sebuah folder bernama “components” di dalam folder “frontend/src”.

Kemudian, buat file components “UserList.js” pada folder “frontend/src/components”.

Seperti gambar berikut:

Kemudian buka file “UserList.js” dan ketikan kode berikut:

import React, { useState, useEffect } from "react";
import axios from "axios";
import ReactPaginate from "react-paginate";

const UserList = () => {
  const [users, setUsers] = useState([]);
  const [page, setPage] = useState(0);
  const [limit, setLimit] = useState(10);
  const [pages, setPages] = useState(0);
  const [rows, setRows] = useState(0);
  const [keyword, setKeyword] = useState("");
  const [query, setQuery] = useState("");
  const [msg, setMsg] = useState("");

  useEffect(() => {
    getUsers();
  }, [page, keyword]);

  const getUsers = async () => {
    const response = await axios.get(
      `http://localhost:5000/users?search_query=${keyword}&page=${page}&limit=${limit}`
    );
    setUsers(response.data.result);
    setPage(response.data.page);
    setPages(response.data.totalPage);
    setRows(response.data.totalRows);
  };

  const changePage = ({ selected }) => {
    setPage(selected);
    if (selected === 9) {
      setMsg(
        "Jika tidak menemukan data yang Anda cari, silahkan cari data dengan kata kunci spesifik!"
      );
    } else {
      setMsg("");
    }
  };

  const searchData = (e) => {
    e.preventDefault();
    setPage(0);
    setMsg("");
    setKeyword(query);
  };

  return (
    
setQuery(e.target.value)} placeholder="Find something here..." />
{users.map((user) => ( ))}
ID Name Email Gender
{user.id} {user.name} {user.email} {user.gender}

Total Rows: {rows} Page: {rows ? page + 1 : 0} of {pages}

{msg}

); }; export default UserList;

#12. App.js

Buka file “App.js” pada folder “frontend/src”, kemudian ubah menjadi seperti berikut:

import UserList from "./components/UserList";

function App() {
  return (
    
); } export default App;

#13. index.js

Buka file “index.js” pada folder “frontend/src”, kemudian ubah menjadi seperti berikut:

import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
import "bulma/css/bulma.css";

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  
    
  
);

#14. Testing

Buka browser Anda dan kunjungi URL berikut:

http://localhost:3000

Jika berjalan dengan baik, maka akan terlihat seperti gambar berikut:

Klik “Next >” beralih ke page selanjutnya atau kita bisa cari data berdasarkan kata kunci tertentu seperti gambar berikut:

Kesimpulan:

Pembahasan kali ini adalah bagaimana membuat search dan pagination menggunakan node.js, express, mysql dan React JS.

Tidak hanya itu, Anda juga telah belajar bagaimana mengoptimalkan pagination untuk meningkatkan performa pagination untuk jumlah data yang sangat banyak.

Jadi tunggu apalagi, Let’s coding!

Dapatkan diskon 75% paket hosting dan gratis domain + extra diskon 5% dengan menggunakan kupon: MFIKRI

Order Sekarang.!

Download Source Code (Back-End) Download Source Code (Front-End)