В php я пытаюсь использовать функцию mont go changestream для просмотра статуса БД, после того, как следовал официальному руководству и начал проект - PullRequest
0 голосов
/ 28 апреля 2020

В php я пытаюсь использовать функцию mont go changestream для просмотра состояния БД, после того, как следовал официальному руководству и запустил проект, он не работал, и не было никакого неправильного сообщения, отображаемого почему ... я использую centos 7 / php 5 / mongodb 4 /

$uri = 'mongodb://127.0.0.1:8017,127.0.0.1:8016/?replicaSet=rstest';
$collection = (new MongoDB\Client($uri))->test->webs;
$changeStream = $collection->watch();
for ($changeStream->rewind(); true; $changeStream->next()) {
    if ( ! $changeStream->valid()) {
        continue;
    }
    $event = $changeStream->current();
    if ($event['operationType'] === 'invalidate') {
        break;
    }
    $ns = sprintf('%s.%s', $event['ns']['db'], $event['ns']['coll']);
    $id = json_encode($event['documentKey']['_id']);
    switch ($event['operationType']) {
        case 'delete':
            printf("Deleted document in %s with _id: %s\n\n", $ns, $id);
            break;
        case 'insert':
            printf("Inserted new document in %s\n", $ns);
            echo json_encode($event['fullDocument']), "\n\n";
            break;
        case 'replace':
            printf("Replaced new document in %s with _id: %s\n", $ns, $id);
            echo json_encode($event['fullDocument']), "\n\n";
            break;
        case 'update':
            printf("Updated document in %s with _id: %s\n", $ns, $id);
            echo json_encode($event['updateDescription']), "\n\n";
            break;
    }
}

php -S 127.0.0.1:9001 PHP 5.6.40 Сервер разработки запущен в вторник, 28 апреля 22:20:14 2020 Прослушивание http://127.0.0.1: 9001 Документ root is / root / Desktop / ssedemo Нажмите Ctrl- C, чтобы выйти.

Когда я получаю "http://localhost: 9001 / demo. php", там ничего не отображается, и всегда в обновленном состоянии, нет неправильного сообщения ....

Тогда я использовал nodejs, чтобы это сделать, это сработало.

MongoClient.connect("mongodb://localhost:8017,localhost:8016?replicaSet=rstest")
  .then(client => {
    console.log("Connected correctly to server ");
    // specify db and collections
    const db = client.db("test");
    const collection = db.collection("webs");
    const changeStream = collection.watch(pipeline);

    changeStream.on("change", function(change) {
      console.log(changeStream);
      console.log(change);
    });
...