sql >> Databasteknik >  >> NoSQL >> MongoDB

Dra en post från en array via Meteor

För en grundläggande meteorapplikation kallar jag "bunk" på detta. Om du skapar ett helt nytt projekt och helt enkelt definierar samlingen, då $pull operatören fungerar som förväntat:

Konsol:

meteor create tickets
cd tickets
meteor run

Öppna sedan ett skal och infoga dina data:

meteor mongo

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

Sedan är det bara att skapa lite grundläggande kod och mall:

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>

Applikationen bör fungera bra, så gör .update() i din webbläsarkonsol (indragen för läsning):

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

Och objektet tas bort från poster och sidan uppdateras utan objektet. Så allt är borta, precis som förväntat.

Även att lägga till paketen SimpleSchema och Collection2 gör ingen skillnad här:

 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
  });
}

Återinitiera data och kör samma kommando i webbläsarkonsolen och allt förblir detsamma.

Kontrollera detta eller eventuella skrivfel i din egen verksamhet eller andra skillnader för att få en ledtråd om varför detta inte fungerar för dig.

Jag skulle starkt föreslå detta, eftersom "att börja om på nytt" så här visar det förväntade beteendet, och om du ser annorlunda beteende är det troligen ett problem med ett annat plugin som du har installerat.

Men i allmänhet fungerar det här.



  1. MongoDB databas kryptering

  2. Hur får man Redis att börja på Heroku?

  3. Redis-servern kan inte köra mer än 1024M maxheap

  4. Lägg till ett nytt fält till varje dokument i en MongoDB-samling