Pro základní meteorickou aplikaci tomu říkám "poschoď". Pokud vytvoříte zcela nový projekt a jednoduše definujete kolekci, pak $pull
operátor pracuje podle očekávání:
Konzole:
meteor create tickets
cd tickets
meteor run
Poté otevřete shell a vložte svá data:
meteor mongo
> db.tickets.insert(data) // exactly your data in the question
Pak stačí vytvořit základní kód a šablonu:
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>
Aplikace by měla běžet v pořádku, takže v konzole prohlížeče proveďte .update()
(odsazeno pro čtení):
Tickers.update(
{ "_id": "ZcEvq9viGQ3uQ3QnT" },
{ "$pull": { "entries": { "id": "fc29774dadd7b37ee0dc5e3e" } }}
)
A položka se odstraní ze záznamů a stránka se obnoví bez položky. Takže vše pryč, přesně podle očekávání.
Dokonce i přidání balíčků SimpleSchema a Collection2 zde není žádný rozdíl:
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
});
}
Znovu inicializujte data a spusťte stejný příkaz v konzole prohlížeče a vše zůstane stejné.
Zkontrolujte toto nebo jakékoli překlepy ve svých vlastních operacích nebo jiné rozdíly, abyste zjistili, proč to pro vás nefunguje.
Důrazně bych to doporučil, protože „začít znovu“ ukazuje očekávané chování, a pokud zaznamenáte jiné chování, pak je pravděpodobně problém s jiným pluginem, který jste nainstalovali.
Ale obecně to funguje.