MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Puxe uma entrada de um array via Meteor


Para uma aplicação básica de meteoros, chamo de "beliche" nisso. Se você criar um projeto totalmente novo e simplesmente definir a coleção, então o $pull operador funciona como esperado:

Console:
meteor create tickets
cd tickets
meteor run

Em seguida, abra um shell e insira seus dados:
meteor mongo

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

Em seguida, basta produzir algum código básico e template:

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>

O aplicativo deve estar rodando bem, então no console do seu navegador faça o .update() (recuado para leitura):
Tickers.update(
    { "_id": "ZcEvq9viGQ3uQ3QnT" },
    { "$pull": { "entries": { "id": "fc29774dadd7b37ee0dc5e3e" } }}
)

E o item é removido das entradas e a página é atualizada sem o item. Então tudo se foi, exatamente como esperado.

Mesmo adicionando os pacotes SimpleSchema e Collection2, não faz diferença aqui:
 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
  });
}

Reinicie os dados e execute o mesmo comando no console do navegador e tudo permanece igual.

Verifique este ou quaisquer erros de digitação em suas próprias operações ou outras diferenças para obter uma pista de por que isso não funciona para você.

Eu sugeriria isso fortemente, pois "começar de novo" mostra o comportamento esperado e, se você estiver vendo um comportamento diferente, provavelmente é um problema com outro plug-in que você instalou.

Mas geralmente, isso funciona.