sql >> Base de Datos >  >> NoSQL >> MongoDB

Extraiga una entrada de una matriz a través de Meteor

Para una aplicación básica de meteoritos, llamo "litera" a esto. Si crea un proyecto completamente nuevo y simplemente define la colección, entonces $pull el operador funciona como se esperaba:

Consola:

meteor create tickets
cd tickets
meteor run

Luego abra un shell e inserte sus datos:

meteor mongo

> db.tickets.insert(data)   // exactly your data in the question

Luego solo produzca un código básico y una plantilla:

tickers.js

Tickers = new Meteor.Collection("tickers");

if (Meteor.isClient) {

  Template.body.helpers({
    "tickers": function() {
      return Tickers.find({});
    }
  });

}

if (Meteor.isServer) {
  Meteor.startup(function () {
    // code to run on server at startup
  });
}

tickers.html

<head>
  <title>tickers</title>
</head>

<body>
  <h1>Welcome to Meteor!</h1>

  <ul>
    {{#each tickers}}
      {{> ticker}}
    {{/each}}
  </ul>

</body>

<template name="ticker">
  <li>
    {{_id}}
    <ul>
      {{#each entries}}
        {{> entry }}
      {{/each}}
    </ul>
  </li>
</template>

<template name="entry">
  <li>{{ id }} - {{text}}</li>
</template>

La aplicación debería funcionar bien, así que en la consola de su navegador haga .update() (sangrado para lectura):

Tickers.update(
    { "_id": "ZcEvq9viGQ3uQ3QnT" },
    { "$pull": { "entries": { "id": "fc29774dadd7b37ee0dc5e3e" } }}
)

Y el elemento se elimina de las entradas y la página se actualiza sin el elemento. Así que todo desapareció, tal como se esperaba.

Incluso agregar los paquetes SimpleSchema y Collection2 no hace ninguna diferencia aquí:

 meteor add aldeed:simple-schema
 meteor add aldeed:collection2

tickers.js

Tickers = new Meteor.Collection("tickers");

TickerEntries = new SimpleSchema({
  "id": {
    type: String,
    optional: true,
    autoValue: function() {
      if (!this.isSet) {
        return new Mongo.Collection.ObjectID()._str
      }
    }
  },
  "text": {
    type: String
  }
});

Tickers.attachSchema(
  new SimpleSchema({
    entries: { type: [TickerEntries] }
  })
);


if (Meteor.isClient) {

  Template.body.helpers({
    "tickers": function() {
      return Tickers.find({});
    }
  });

}

if (Meteor.isServer) {
  Meteor.startup(function () {
    // code to run on server at startup
  });
}

Vuelva a inicializar los datos y ejecute el mismo comando en la consola del navegador y todo permanecerá igual.

Verifique este o cualquier error tipográfico en sus propias operaciones u otras diferencias para obtener una pista de por qué esto no funciona para usted.

Sugeriría esto encarecidamente, ya que "comenzar de nuevo" como este muestra el comportamiento esperado, y si observa un comportamiento diferente, es probable que sea un problema con otro complemento que haya instalado.

Pero, en general, esto funciona.